首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有http服务器的Socket.IO?

没有http服务器的Socket.IO?
EN

Stack Overflow用户
提问于 2015-10-17 23:13:01
回答 2查看 16.6K关注 0票数 29

我目前正在使用nodejs的Socket.IO在服务器和一些客户端之间共享一些实时信息。客户端应该只与服务器通信,而不是彼此通信。

在socket.io上一切都很好,我可以共享信息,但是当它把东西放到linux vps上时,我遇到了一个问题,他在一个ipv6套接字上启动了所有的东西,这使得我很难从windows连接到客户端浏览器库。

我像这样启动服务器:

代码语言:javascript
复制
io = require('socket.io').listen(3000);

它工作得很好,而且我可以连接。现在,在linux上,我尝试使用如下的ipv4地址来阻止ipv6

代码语言:javascript
复制
io = require('socket.io').listen(3000, '0.0.0.0');

但这并不管用,在linux和Windows上都不管用。他不会将套接字绑定到我想要的ip上,除非我像这样使用http服务器:

代码语言:javascript
复制
http = require('http').createServer().listen(3000, '0.0.0.0');
io = require('socket.io').listen(http);

现在我的问题是,我必须使用http服务器来解决将套接字绑定到正确的本地ip和端口的问题,还是有其他解决方案?在我的第一行代码中,socketio是否会在后台启动http服务器,因为它是一个web套接字,或者socketio是否可以在没有http服务器的情况下工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-17 23:35:15

Socket.io和一般的WebSockets需要http服务器进行初始升级握手。因此,即使您没有为Socket.io提供http服务器,它也会为您创建一个。

问题是Socket.io忽略了io.listen(3000, '0.0.0.0')中的第二个参数。如果您需要控制侦听哪个网络接口,则应该使用最后一个代码片段中的代码,因为它本质上是Socket.io在幕后执行的操作。

代码语言:javascript
复制
var http = require('http').createServer().listen(3000, '0.0.0.0');
var io = require('socket.io').listen(http);

WebSocket连接是由客户端通过常规HTTP协议执行Protocol Upgrade请求来发起的,这就是为什么需要HTTP服务器。

另一方面,Socket.io与其他WebSocket服务器略有不同。它在幕后使用Engine.IO,这是一个以可靠为目标的实现。它默认通过XHR / JSONP轮询(定期发生的常规HTTP请求-响应)模拟WebSocket连接,但如果可能的话,会将连接升级为WebSocket连接。原因是他们的研究发现,各种防火墙、代理和反病毒软件确实会阻止WebSocket连接,并且他们的Engine.IO实现向您隐藏了这一事实,而不必在WebSocket连接被阻止的情况下实现回退解决方案。

票数 43
EN

Stack Overflow用户

发布于 2020-11-20 19:50:52

您可以使用“net”模块创建套接字连接,而无需传递http参数。大多数像Socket.io这样的套接字库都是建立在“net”模块之上的。

下面是一个在服务器端使用“net”模块的例子:

代码语言:javascript
复制
const net = require('net');

const server = net.createServer((socket) => {
  socket.end(`${new Date()}\n`);
});
server.listen(56010);

以下是如何在客户端使用:

代码语言:javascript
复制
const net = require('net');

const client = new net.Socket();
client.connect({ port: 56010, host: '127.0.0.1' });
client.on('data', (data) => {
  console.log(data.toString('utf-8'));
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33188147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档