【发布时间】:2021-05-24 23:13:55
【问题描述】:
我正在查看 this sample connection 和 socket.io 并且我正在尝试让客户端连接到“https://scorebot-lb.hltv.org”(这不是网络套接字 Api)例如 .NET WebSockets。
示例 Node.js 语法
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://”网址,如果您尝试输入“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';
其他测试,但没有成功:
public static void Main(string[] args)
{
using (var ws = new WebSocketSharp.WebSocket("scorebot-lb.hltv.org"))
{
ws.OnMessage += (sender, e) =>
Console.WriteLine("...");
ws.Connect();
ws.Send("...");
Console.ReadKey(true);
}
}
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 Long Polling有关),所以我们需要一个socket.io客户端库来做这个。请检查我的答案。
【问题讨论】:
-
当您使用
wss时发生了什么错误?这是 TLS websockets 的正确 URL 方案 -
我很确定这不是你想的那样。如果您 search the web 为 hltv.org 提供 websocket 服务,则没有任何结果。你能指导我们到 hltv.org 的 Websocket API 吗?也许我不是在寻找正确的东西。你提到的那个 nuget 包只是一个网络爬虫项目。他们可能基于爬虫代码创建了自己的自定义 websocket 服务器。
-
@Andy 是的,没有用于 HLTV 的官方 API 或 Websocket API。 Node.js 库报废匹配页面和“连接到 scorebot”。如果 socket.io 可以做到这一点,为什么 SocketIOSharp(SocketIOSharp 是 Socket.IO 协议修订 4 库)不能?
-
@SamiKuhmonen 你的意思是什么格式?
wss://scorebot-lb.hltv.org? -
@Igor 是的,只需将 https 替换为 wss,然后它就是一个有效的 TLS websockets URL
标签: .net asp.net-core websocket socket.io