它';s可以连接到";HTTP长轮询服务器“;作为一个「;“客户”;使用.NET WebSocket?
我正在看,我正在尝试建立一个客户连接”https://scorebot-lb.hltv.org(这不是一个web套接字Api),例如.NET WebSockets 示例Node.js语法它';s可以连接到";HTTP长轮询服务器“;作为一个「;“客户”;使用.NET WebSocket?,.net,asp.net-core,websocket,socket.io,.net,Asp.net Core,Websocket,Socket.io,我正在看,我正在尝试建立一个客户连接”https://scorebot-lb.hltv.org(这不是一个web套接字Api),例如.NET WebSockets 示例Node.js语法 SampleConn = async () => { const url = 'https://scorebot-lb.hltv.org' const matchId = 2348837 const socket = io.connect(url) const ini
SampleConn = async () => {
const url = 'https://scorebot-lb.hltv.org'
const matchId = 2348837
const socket = io.connect(url)
const initObject = JSON.stringify({
token: '',
listId: matchId
})
let reconnected = false
socket.on('connect', () => {
if (!reconnected) {
socket.emit('readyForMatch', initObject)
}
socket.on('scoreboard', (data) => {
...
})
socket.on('log', (data) => {
...
})
socket.on('fullLog', (data) => {
...
})
})
return "";
};
Node.js中的这个示例非常有效。但是在我的.NET默认设置中,套接字配置需要一个“ws://”或“wss://”URL,如果您尝试放置https://scorebot-lb.hltv.org“我们遇到了一些错误,例如:
1 - HostNotFound;
2 - System.ArgumentException: 'The scheme part isn't 'ws' or 'wss': https://scorebot-lb.hltv.org';
3 - System.ArgumentException: 'Not an absolute URI: scorebot-lb.hltv.org';
其他测试未成功:
class Program
{
public static void Main(string[] args)
{
try
{
var options = new SocketIOClientOption(EngineIOScheme.http, "scorebot-lb.hltv.org", 80);
var client = new SocketIOClient(options);
client.Connect();
client.On("connect", () => {
client.Emit("readyForMatch", "{'token':'','listId':2348837}");
client.On("scoreboard", () => {});
client.On("log", () => { });
client.On("fullLog", () => { });
});
Console.WriteLine();
}
catch (Exception ex)
{
throw;
}
}
}
那条路是什么?有可能吗
[更新]
简言之,不,这是不可能的。在我写这个问题之前,我不知道HLTV记分板使用socket.io(我认为这与HTTP长轮询有关),所以我们需要一个socket.io客户端库来完成这项工作。请检查我的答案。我与回购协议的所有者进行了交谈,他告诉我:
HLTV使用套接字io,因此这是不可能的。您需要连接socket io客户端,否则它将无法工作
在本例中,我作为客户机与(前面提到的问题)建立了连接,实现如下:
using System;
using SocketIOSharp.Client;
using SocketIOSharp.Common;
using EngineIOSharp.Common.Enum;
class Program {
static void Main(string[] args)
{
var socketIOClient =
new SocketIOClient(new SocketIOClientOption(EngineIOScheme.http, "scorebot-lb.hltv.org", 80));
InitEventHandlers(socketIOClient);
socketIOClient.Connect();
Console.Read();
}
static void InitEventHandlers(SocketIOClient socketIOClient)
{
socketIOClient.On(SocketIOEvent.CONNECTION, () =>
{
Console.WriteLine("Connected!");
socketIOClient.Emit("readyForMatch", "{'token':'','listId':2348897}");
});
socketIOClient.On(SocketIOEvent.DISCONNECT, () =>
{
Console.WriteLine("Disconnected!");
});
//Sample event...
socketIOClient.On("scoreboard", (Data) =>
{
Console.WriteLine(Data[0]);
});
} }
有了这个实现,事情现在就可以正常工作了。当您使用
wss
时发生了什么?这是TLS WebSocket的正确URL方案我很确定这不是你想象的那样。如果您为hltv.org申请websocket服务,则不会出现任何问题。你能告诉我们hltv.org的Websocket API吗?也许我找的东西不对。你提到的nuget软件包只是一个web scraper项目。他们可能根据scraper代码创建了自己的自定义websocket服务器。@Andy是的,HLTV没有正式的API或websocket API。在Node.js库中显示匹配页面和“连接到scorebot”。如果socket.io可以做到这一点,为什么SocketIOSharp(SocketIOSharp是socket.io协议修订版4库)不能做到呢?@SamiKuhmonen您指的是什么格式<代码>wss://scorebot-lb.hltv.org?@Igor是的,只要用wss替换https,它就是一个有效的TLS websockets URL
using System;
using SocketIOSharp.Client;
using SocketIOSharp.Common;
using EngineIOSharp.Common.Enum;
class Program {
static void Main(string[] args)
{
var socketIOClient =
new SocketIOClient(new SocketIOClientOption(EngineIOScheme.http, "scorebot-lb.hltv.org", 80));
InitEventHandlers(socketIOClient);
socketIOClient.Connect();
Console.Read();
}
static void InitEventHandlers(SocketIOClient socketIOClient)
{
socketIOClient.On(SocketIOEvent.CONNECTION, () =>
{
Console.WriteLine("Connected!");
socketIOClient.Emit("readyForMatch", "{'token':'','listId':2348897}");
});
socketIOClient.On(SocketIOEvent.DISCONNECT, () =>
{
Console.WriteLine("Disconnected!");
});
//Sample event...
socketIOClient.On("scoreboard", (Data) =>
{
Console.WriteLine(Data[0]);
});
} }