Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/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
它';s可以连接到";HTTP长轮询服务器“;作为一个「;“客户”;使用.NET WebSocket?_.net_Asp.net Core_Websocket_Socket.io - Fatal编程技术网

它';s可以连接到";HTTP长轮询服务器“;作为一个「;“客户”;使用.NET WebSocket?

它';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

我正在看,我正在尝试建立一个客户连接”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 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]);
            });
        } }