在nodejs中使用socket.io和net socket

Posted

技术标签:

【中文标题】在nodejs中使用socket.io和net socket【英文标题】:Using socket.io with net socket in nodejs 【发布时间】:2016-01-21 19:24:36 【问题描述】:

有没有办法可以在 nodejs 中使用 socket.io 和 net socket?所以最后我有监听端口的主服务,等待连接(网络套接字)和主服务,同时监听客户端想要使用 socket.io 建立连接。

示例场景:

在端口 X 上为来自客户端服务的任何连接请求运行的主服务列表。

客户端打开的网络浏览器使用http服务器连接到主服务

如果客户端服务(服务器B)通过网络套接字传入任何数据,数据将通过socket.io发送到连接的客户端打开浏览器。

【问题讨论】:

您能具体说明NET SOCKET 是什么意思吗?它是某种特定的协议吗? NET SOCKET是socket连接,nodejs称之为net模块。 nodejs.org/api/… 【参考方案1】:

Nodejs 允许在同一个运行进程中打开 2 个端口。 下面的例子显示:

端口 8124 上的主要服务列表,用于使用 net socket 的任何传入套接字连接。

主服务在端口 8081 上侦听任何传入的 http 连接,客户端可以使用 socket.io 从主服务接收任何数据

Expressjs 版本:4.13.3 socket.io 版本:1.3.7

示例:

主要服务

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


var netServer = net.createServer(function(c) 
  console.log('client connected');

  c.on('end', function() 
    console.log('client disconnected');
  );

  c.write('hello\r\n');
  c.pipe(c);
);

// main service listing to any service connection on port 8124
netServer.listen(8124);

app.get('/', function (req, res) 
  res.sendFile(__dirname+'/index.html');
);

app.use(express.static(__dirname+'/static'));

io.on('connection', function (socket) 
  socket.emit('news',  hello: 'world' );
  socket.on('my other event', function (data) 
    console.log(data);
  );
);
server.listen(8081);

客户端服务(服务器 B):

   var net = require('net');

var client = new net.Socket();
client.connect(8124, '127.0.0.1', function() 
    console.log('Connected');
    client.write('Hello, server! Love, Client.');
);

client.on('data', function(data) 
    console.log('Received: ' + data);
);

client.on('close', function() 
    console.log('Connection closed');
);

index.html

<script src="/js/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost:8081');
  socket.on('news', function (data) 
    console.log(data);
    socket.emit('my other event',  my: 'data' );
  );
</script>

【讨论】:

干得好,但是,如果服务器 B 是 telnet 呢? 嗨,c.pipe(c); 是什么?用于?

以上是关于在nodejs中使用socket.io和net socket的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS Socket.io 服务器<-->服务器通信

如何使用 mysql 数据库中的 nodejs 和 socket.io 在网页上获得实时更新?

NodeJs - express 和 socket.io 同端口集成

如何在前端获取 socket.on 函数?事件被触发和处理。我正在使用 socket.io、NodeJS 服务器和 Redis.io

nginx 作为 NodeJS+socket.io 的代理:除了大消息外一切正常

菜鸟学习nodejs--Socket.IO即时通讯