【发布时间】:2021-05-18 22:40:41
【问题描述】:
我正在尝试设置一个非常基本的 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 或 this C# 库时,我从未看到触发连接事件。
我查看了 Socket.IO JS 客户端的默认选项并尝试在 Firecamp 中重现它们:https://socket.io/docs/v3/client-api/index.html
最重要的似乎是Path= /socket.io、ForceNew = True 和Transports = polling, websocket。我决定删除轮询传输,因为我不断收到 XHR 轮询错误,但 websocket 在 C# 和 Firecamp 中也超时。
我尝试连接到“http://localhost:3000”和“http://localhost”。 这是screenshot of my Firecamp settings
我的 C# 程序也有类似的问题
Quobject.Collections.Immutable.ImmutableList<string> trans = Quobject.Collections.Immutable.ImmutableList.Create<string>("websocket");
IO.Options options = new IO.Options();
options.Port = 3000;
options.Agent = false;
options.Upgrade = false;
options.Transports = trans;
client = IO.Socket("http://localhost:3000", options);
client.On(Socket.EVENT_CONNECT, () =>
Console.WriteLine("Connected"));
client.On(Socket.EVENT_CONNECT_ERROR, (Data) => Console.WriteLine("Connect Error: " + Data));
client.On(Socket.EVENT_CONNECT_TIMEOUT, (Data) => Console.WriteLine("Connect TImeout Error: " + 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 ---
我可以切换哪些其他配置设置来尝试让我的 Firecamp 或 C# 连接显示在我的 JS 服务器中?我收到来自轮询传输的“XHR 轮询错误”,以及来自 websocket 传输的超时。是否有其他调试信息可以用来确定我的问题所在?我认为,如果我可以在 Firecamp 或 C# 中进行通信,我应该能够使其在其他环境中正常工作。
【问题讨论】: