標籤:
提到Node,不能錯過的是WebSocket協議。它與Node之間的配合堪稱完美,其理由有兩條。
1.WebSocket用戶端基於時間的編程模型與Node中自訂事件相差無幾。
2.WebSocket實現了用戶端與服務端之間的長串連,而Node事件驅動的方式十分擅長與大量用戶端保持高並發串連。
----《深入淺出Nodejs》
參考資料
GIT nodejs-socketio-chat
GIT socket.io
SocketIO4NetClient
在Node的學習過程中,最使我感興趣的就是socket.io模組,在git上也有不少大牛做的node之間的訪問模組,覺得大體上相差不多,有的區別在於使用方法和舒適度上,但經過node中很多知名模組的配合下,代碼的整潔度已經讓習慣順序邏輯編程的人覺得很舒服,而且在適當的時候 根據自己的意願使用並行,這種邏輯帶來的快感 ,有時,是讓開發人員很爽的一件事。
再說會用vs串連node服務端時,使用socket.io模組就稍稍有些吃力,研究了兩天,在網上找到SocketIO4NetClient。編譯後是dll檔案,在項目中可直接引用,在unity用戶端裡 放在項目根目錄下就會自動解析,但在unity發布到不同的平台時,會出現一些問題,解決方案是將項目源碼匯入到unity項目中,經過unity編譯後發行就緒到各平台運行。
socket.ionode服務端
$npm install socket.io -g
首先在命令列安裝socket.io模組,如在項目中使用時報錯“not found module socket.io”,則要在項目目錄下執行$npm install socket.io,在項目根目錄產生的 node_modules 裡面會添加socket.io模組,並成功引用。
var app = require(‘express‘)();var http = require(‘http‘).Server(app);var io = require(‘socket.io‘)(http);app.get(‘/‘, function (req, res) { res.end(‘welcome to socket demo ‘);});http.listen(3000, function () { console.log(‘server localhost:3000 is start‘);});
為了便於配置,這裡使用了express架構,提示找不到模組的 可以像安裝socket.io模組方式,安裝express。
代碼中在訪問根目錄時候,會返回字串 welcome to socket demo ,node將監聽3000連接埠。
io.on(‘connection‘, function (socket) { socket.on(‘message‘, function (obj) { io.emit(‘message‘,obj); });});
以上代碼可以理解為,在服務端接收名稱為 connection 訪問時,在socket中 監聽message事件,將傳入的obj參數,推送給用戶端。
c#用戶端
首先將源碼中的dll檔案添加到項目引用中
{
Client socket = new Client("http://localhost:3000"); socket.Opened += clien_Opened; socket.Message += clien_Message; socket.SocketConnectionClosed += clien_SocketConnectionClosed; socket.Error += clien_Error;
socket.On("connection", (fn) =>
{
Console.WriteLine("connect enevt start");
socket.Emit("messgae", reJson);
});
socket.Connect();
}
void clien_Error(object sender, ErrorEventArgs e)
{
Console.WriteLine("a error show"+e.Message);
}
void clien_SocketConnectionClosed(object sender, EventArgs e)
{
Console.WriteLine("socket connection succeed!");
}
void clien_Message(object sender, MessageEventArgs e)
{
if (e != null && e.Message.Event == "message")
{
}
}
void clien_Opened(object sender, EventArgs e)
{
Console.WriteLine("socket was open...");
}
c#SocketIO4NetClient訪問node js