Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Websocket 为什么我的Socket.IO服务器没有响应我的Firecamp和C#客户端?_Websocket_Socket.io - Fatal编程技术网

Websocket 为什么我的Socket.IO服务器没有响应我的Firecamp和C#客户端?

Websocket 为什么我的Socket.IO服务器没有响应我的Firecamp和C#客户端?,websocket,socket.io,Websocket,Socket.io,我正在尝试设置一个非常基本的Socket.IO服务器和一个.NET/Firecamp客户端,以了解如何在两者之间发送事件 我的Javascript Socket.IO服务器设置如下: const http = require("http"), express = require("express"), socketio = require("socket.io"); const app = expres

我正在尝试设置一个非常基本的Socket.IO服务器和一个.NET/Firecamp客户端,以了解如何在两者之间发送事件

我的Javascript Socket.IO服务器设置如下:

const
    http = require("http"),
    express = require("express"),
    socketio = require("socket.io");    

const app = express();
const server = http.createServer(app);    
const io = socketio(server);
const SERVER_PORT = 3000;

io.on("connection", () => {
    console.log("Connected");
    io.emit("foo", "123abc");
});

server.listen(SERVER_PORT);
我能够连接一个简单的Socket.IO Javascript文件:

const
    io = require("socket.io-client"),
    ioClient = io.connect("http://localhost:3000");

ioClient.on('connect', () => {
    console.log("connected");    
});
当我尝试连接Firecamp或C#library时,我从未看到连接事件被触发

我查看了Socket.IO JS客户端的默认选项,并尝试在Firecamp中复制它们:

最重要的似乎是
Path=/socket.io
ForceNew=True
,以及
Transports=polling,websocket
。我决定删除轮询传输,因为我不断收到XHR轮询错误,但websocket在C#和Firecamp中也会超时

我已尝试连接到“http://localhost:3000“而且公正”http://localhost". 这是一个

我的C#程序也遇到了类似的问题

Quobject.Collections.Immutable.ImmutableList trans=Quobject.Collections.Immutable.ImmutableList.Create(“websocket”);
IO.Options=new IO.Options();
选项。端口=3000;
options.Agent=false;
options.Upgrade=false;
选项。运输=运输;
客户端=IO.Socket(“http://localhost:3000“,选项);
client.On(Socket.EVENT_CONNECT,()=>
控制台。写入线(“已连接”);
client.On(Socket.EVENT\u CONNECT\u ERROR,(Data)=>Console.WriteLine(“CONNECT ERROR:+Data”);
client.On(Socket.EVENT\u CONNECT\u TIMEOUT,(Data)=>Console.WriteLine(“连接超时错误:+Data”);
client.On(Socket.EVENT_ERROR,(Data)=>Console.WriteLine(“ERROR:+Data”);
client.Connect();
如果我只使用websocket传输,我在Firecamp和C#中都会超时。如果启用轮询,我将收到以下错误:

    Error: Quobject.EngineIoClientDotNet.Client.EngineIOException: xhr poll error ---> System.AggregateException: One or more errors occurred. ---> System.Net.WebException: The remote server returned an error: (400) Bad Request.
   at System.Net.HttpWebRequest.GetResponse()
   at Quobject.EngineIoClientDotNet.Client.Transports.PollingXHR.XHRRequest.<Create>b__7_0()
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at Quobject.EngineIoClientDotNet.Client.Transports.PollingXHR.XHRRequest.Create()
   --- End of inner exception stack trace ---
错误:qobject.EngineIoClientDotNet.Client.EngineIOException:xhr轮询错误-->System.aggregateeexception:发生一个或多个错误。-->System.Net.WebException:远程服务器返回错误:(400)请求错误。
在System.Net.HttpWebRequest.GetResponse()中
在qobject.engineioclientdtnet.Client.Transports.PollingXHR.xhrequest.b_u7_0()中
在System.Threading.Tasks.Task.InnerInvoke()中
在System.Threading.Tasks.Task.Execute()中
---内部异常堆栈跟踪的结束---
位于System.Threading.Tasks.Task.ThrowifeException(布尔值IncludeTaskCanceledException)
在System.Threading.Tasks.Task.Wait(Int32毫秒计时,CancellationToken CancellationToken)
在qobject.EngineIoClientDotNet.Client.Transports.PollingXHR.xhrequest.Create()处
---内部异常堆栈跟踪的结束---

我还可以切换哪些其他配置设置来尝试让Firecamp或C#连接显示在我的JS服务器中?我从轮询传输接收到“XHR轮询错误”,从websocket传输接收到超时。是否有其他调试信息可用于确定问题所在?我认为,如果我能在Firecamp或C#中实现通信,我应该能够在其他环境中实现通信。

我假设您使用的是SocketIO v3客户端。Firecamp仅支持SocketIO v2。但好消息是,在短短两天内,Firecamp将在新的canary版本中支持SocketioV3。我会在这里随时通知您。

如上所述,Firecamp尚未针对新版本的Socket.IO(v4)进行优化。
因此,同时您可以选择手动启用Socket.IO v2客户端的兼容性。
您只需将“allowEIO3:true”(不带引号)作为key:value对添加到option对象,并在创建服务器时传递此对象。
这将允许您通过Firecamp与服务器通信

来源

下面是一个与express server集成的socket.io服务器的示例

const app = require('express')();
const httpServer = require('http').createServer(app);
const options = {
      allowEIO3: true,
 };
const io = require('socket.io')(httpServer, options);

app.get('/', (req, res) => {
    res.send('home endpoint');
});

io.on('connection', (socket) => {
   socket.on('new-connection', (data) => {
   console.log(socket.id, 'connected');
   socket.broadcast.emit('test-event', { name: data.name });
 });

// when the user disconnects.. perform this
 socket.on('disconnect', () => {
    console.log(`${socket.id} disconnected`);
  });
});

const port = 3000;

httpServer.listen(port, () => {
   console.log(`server running on port ${port}`);
});

太好了,谢谢!这个工具非常强大和有用,让创造者回答我的问题让我有点吃惊。感谢您安装了socket.io 2.4.1,我的服务器现在正在Firecamp中工作,谢谢您的提示@Nishchit Dhanani不错的选择,更新已经推出了吗?我在哪里可以找到更多关于这方面的信息?SocketIO v3支持现在在private canary release下提供,请加入Discord服务器并使用DM me进行访问@Huzaifa和Jalcolvon 2
const app = require('express')();
const httpServer = require('http').createServer(app);
const options = {
      allowEIO3: true,
 };
const io = require('socket.io')(httpServer, options);

app.get('/', (req, res) => {
    res.send('home endpoint');
});

io.on('connection', (socket) => {
   socket.on('new-connection', (data) => {
   console.log(socket.id, 'connected');
   socket.broadcast.emit('test-event', { name: data.name });
 });

// when the user disconnects.. perform this
 socket.on('disconnect', () => {
    console.log(`${socket.id} disconnected`);
  });
});

const port = 3000;

httpServer.listen(port, () => {
   console.log(`server running on port ${port}`);
});