nodejs的socket.io和socket应用

       使用nodejs有一段时间,但主要应用场景就是nodejs通过socket.io实现web客户端与nodejs服务端的实时交互,今天遇到一个问题,就是其他的系统监控数据实时推送给nodejs,nodejs再推送给web客户端,网上找了很多资料,看了superwebsocket,websoketio4net,按代码测试就是通不过,看了一个websocketoi4net引用的文件有8个,感觉一个小功能而以,引用这么多dll太不划算了,说白了websocket的底层还是soket了,于是就想能不能使用nodejs自带的soket功能来实现了,马上进入nodejs官网一看,原来是有net模块的,带了socket方法,一看使用示例,简单得很,区区几行代码就可以实现socket服务端的端口监听;

     第三方系统是.net的,.net也有using System.Net.Sockets,创建一个客户端也只有区区几行,不用引用任何第三方dll,代码整简,功能清晰;

     实现思路很清晰了,即第三方系统socket 客户端将数据转成json格式的string,nodejs socket服务端接收同时转成json,然后socket.io广播给web客户端,搞定收工!

上.net代码:

 /// <summary>
        /// 发送消息
        /// </summary>
        public void Execute()
        {
            if (this.clientSocket == null) {
                clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                clientSocket.Connect(new IPEndPoint(IPAddress.Parse(_ip), _port)); //配置服务器IP与端口  
            }
            try
            {
                //string tmpstr = "{"success":true,"msg":"","datas":{"custlist":[],"cardphoto":"","worklist":[{"code":"G02","name":"大工"},{"code":"G03","name":"技师"},{"code":"G04","name":"助理"}],"mastercode":"M0000000005","companycode":"M0003","currdate":"2017 - 04 - 03"}}";
                JObject jobj = new JObject();
                jobj.Add("success",true);
                jobj.Add("msg", "");
                jobj.Add("datas", "code");
                jobj.Add("code", "大工");
                jobj.Add("date", DateTime.Now);
                clientSocket.Send(Encoding.UTF8.GetBytes(jobj.ToString()));
            }
            catch(Exception ex)
            {
                listBox1.Items.Insert(0,"发送数据包失败"+ex.StackTrace);
            }
        }


nodejs 服务端js

var app = require('express')();var http = require('http').Server(app);
var io = require('socket.io')(http);
var net = require('net');

var HOST = '127.0.0.1';
var PORT = 6969;

// 创建一个TCP服务器实例,调用listen函数开始监听指定端口
// 传入net.createServer()的回调函数将作为”connection“事件的处理函数
// 在每一个“connection”事件中,该回调函数接收到的socket对象是唯一的
net.createServer(function(sock) {
    // 我们获得一个连接 - 该连接自动关联一个socket对象
    console.log('CONNECTED: ' +
        sock.remoteAddress + ':' + sock.remotePort);

    // 为这个socket实例添加一个"data"事件处理函数
    sock.on('data', function(data) {
        console.log('DATA ' + sock.remoteAddress + ': ' + data);
		//将数据广播给所有Web客户端
		if (Buffer.isBuffer(data)){
			io.sockets.emit('data',JSON.parse(data));
		}else{
			io.sockets.emit('data',data);
		}
		
        // 回发该数据,客户端将收到来自服务端的数据
        //sock.write('You said "' + data + '"');
    });

    // 为这个socket实例添加一个"close"事件处理函数
    sock.on('close', function(data) {
        console.log('CLOSED: ' +
            sock.remoteAddress + ' ' + sock.remotePort);
    });
}).listen(PORT, HOST);


猜你喜欢

转载自blog.csdn.net/baronyang/article/details/68956524
今日推荐