【问题标题】:Using socket.io with net socket in nodejs在nodejs中使用socket.io和net socket
【发布时间】: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/…

标签: node.js sockets socket.io


【解决方案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); 是什么?用于?
猜你喜欢
  • 2016-11-29
  • 2018-06-24
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多