gpt4 book ai didi

node.js - NodeJS SocketIO - 如何确保正在使用 websockets?

转载 作者:太空宇宙 更新时间:2023-11-03 22:51:16 27 4
gpt4 key购买 nike

背景

  • 我正在努力将 Unity 应用程序连接到 SocketIO 应用程序
  • Unity 正在使用 SocketIO 插件(仅使用 websockets,不使用轮询/xhr)

要从 Unity 连接到我的 websocket,我正在使用 ws://localhost:3000/socket.io/?EIO=4&transport=websocket 。如果我通过浏览器点击该链接,我会看到以下内容:

{"code":3,"message":"Bad request"}

此时,我使用 io.set('transports', ['websocket']); 为我的 NodeJS 应用程序强制使用 websocket。但后来我的应用程序停止工作。

问题

如何确保 Websocket 可用于 NodeJS+SocketIO?

代码

app.js

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

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

var server = app.listen(3000, function () {
var host = server.address().address
var port = server.address().port
});
var io = require('socket.io').listen(server);
//io.set('transports', ['websocket']);

...

设置

  • Ubuntu@14.04
  • NodeJS@0.10.25
  • SocketI@O1.7.3
  • express@4.15.2

最佳答案

默认情况下,socket.io 客户端以 http 轮询开始,然后在几次轮询事务后切换到 webSocket。据我所知,您在服务器上所做的任何事情都不会改变客户端的行为方式,因此如果您不支持服务器上的轮询并且不更改客户端的配置方式,那么初始的 socket.io 客户端连接将无法工作。但是,您可以在客户端和服务器中进行相应的更改,以强制 socket.io 仅使用 webSocket,甚至从一开始也是如此。如果您查看网络跟踪,您仍然会看到初始 HTTP 连接,因为所有 webSocket 连接都以 HTTP 连接开始,但随后该 HTTP 连接会“升级”为 webSocket 协议(protocol)。

您可以在此处查看有关如何将客户端和服务器配置为仅使用 webSocket 的所有详细信息:Socket.io 1.x: use WebSockets only? 。简而言之,您需要在客户端中执行此操作以建立连接:

var socket = io({transports: ['websocket'], upgrade: false});

关于node.js - NodeJS SocketIO - 如何确保正在使用 websockets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43072682/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com