Javascript Socket.io和Express不发送数据

Javascript Socket.io和Express不发送数据,javascript,node.js,express,websocket,socket.io,Javascript,Node.js,Express,Websocket,Socket.io,我正在尝试使用socket.io连接到此websocket api: (wss://streamer.cryptocompare.com) 我想我不是很了解socket.io 我创建了一个空白html文档: <!doctype html> <html lang="en"> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/sock

我正在尝试使用socket.io连接到此websocket api:

(wss://streamer.cryptocompare.com)

我想我不是很了解socket.io

我创建了一个空白html文档:

    <!doctype html>
    <html lang="en">
        <head>
            <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.slim.js"></script>
        </head>

        <body>

            <div id="data-show">
            </div>

            <button id="connect-sock">Connect</button>
            <button id="disconnect-sock">DISConnect</button>

        </body>
        <script src="index.js"></script>


    </html>
server.js:

var express = require('express')
var socket = require('socket.io')
var app = express()

var server = app.listen(4000, function(){
    console.log("well met")
})



app.use(express.static('public'))

var io = socket(server)

io.on('connection', function(socket){
    console.log('well met from socket connection', socket.id)
})
server.js位于名为“socket test”的文件中。index.html和index.js位于“socket test/public/”中

因此,出于某种原因,在server.js中,socket.id不会登录到控制台。就好像这个函数被跳过了一样。但是,当我将index.js中的地址更改为时,我会在控制台中获得socket.id。。。不知道那里发生了什么

编辑:当使用wss://streamer.cryptocompare.com/ ,有时我喜欢,但大多数时候我不喜欢。当我切换到本地主机,运行服务器,停止服务器,然后切换回拖缆时,它通常会起作用,但是如果我重新加载,我将不再获得socket.id

我以为我要求它做的就是发射潜艇wss://streamer.cryptocompare 然后是console.log(数据),它在发出subs后返回

我是不是遗漏了什么


如果很明显我遗漏了什么,请提前道歉。关于socket.io,我只知道大概3天了,直到今天我才在youtube上观看了一个基本教程。

您不需要Express代码,因为在这种情况下,您要与之交谈的服务器位于cryptocompare服务器上,而不是本地服务器。当您初始化HTML文件中的
io
对象时,这将在代码中捕获

当然,如果您对Node更熟悉,您仍然可以使用Node与cryptocompare websockets API进行对话。但是这样你就不需要浏览器中的JavaScript了。无论采用哪种方式,您都需要在任何运行时创建某种类型的客户端,该客户端使用websockets并可以与cryptocompare websockets API进行通信

关于被跳过的代码,你是对的!它是。是一个事件驱动的WebSockets框架。这意味着客户机注册了他们对某些类型的事件/消息的兴趣,当这些事件/消息被触发时,将调用称为回调的特殊函数

如果有帮助的话,你可以把这些事件想象成聊天室中的频道——如果你不在合适的聊天室,你就看不到该聊天室的消息。因此,您需要知道应该侦听哪些消息,注册您对这些消息的兴趣,并为每个消息注册回调函数

谢天谢地,cryptocompare提供了客户端代码示例,可以帮助您了解应该侦听的消息类型。
请参见

您不需要Express代码,因为在本例中,您要与之对话的服务器位于cryptocompare服务器上,而不是本地服务器。当您初始化HTML文件中的
io
对象时,这将在代码中捕获

当然,如果您对Node更熟悉,您仍然可以使用Node与cryptocompare websockets API进行对话。但是这样你就不需要浏览器中的JavaScript了。无论采用哪种方式,您都需要在任何运行时创建某种类型的客户端,该客户端使用websockets并可以与cryptocompare websockets API进行通信

关于被跳过的代码,你是对的!它是。是一个事件驱动的WebSockets框架。这意味着客户机注册了他们对某些类型的事件/消息的兴趣,当这些事件/消息被触发时,将调用称为回调的特殊函数

如果有帮助的话,你可以把这些事件想象成聊天室中的频道——如果你不在合适的聊天室,你就看不到该聊天室的消息。因此,您需要知道应该侦听哪些消息,注册您对这些消息的兴趣,并为每个消息注册回调函数

谢天谢地,cryptocompare提供了客户端代码示例,可以帮助您了解应该侦听的消息类型。
请参见

放置错误处理程序,
socket.on('error',console.error)
并告诉我们您遇到了什么错误。啊。。。我在想。。。我马上加上这个!顺便说一句,我相信你把本地主机和外部服务器搞混了
当我切换到本地主机,运行服务器,停止服务器,然后切换回拖缆时,它通常会起作用,但如果重新加载,我将不再获得socket.id
。localhost与
streamer.cryptocompare.com
无关,所以我不明白为什么要发布node.js服务器代码,因为
streamer.cryptocompare.com
是第三方websocket服务器。我这样做是为了测试一些东西。例如,我正在构建一个webapp,它将在本地服务器上手动更新。我想我只是认为REST和Websocket服务器不会有太大区别。但同时,我也在学习一个教程。我认为localhost:4000是一个客户端,我正在尝试将它连接到websocket APIM,但没有收到任何错误。。。localhost:不是localhost:在('error',console.error)上放置一个错误处理程序,
socket.on,让我们知道您遇到了什么错误。啊。。。我在想。。。我马上加上这个!顺便说一句,我相信你把本地主机和外部服务器搞混了
当我切换到本地主机,运行服务器,停止服务器,然后切换回拖缆时,它通常会起作用,但如果重新加载,我将不再获得socket.id
。localhost与
streamer.cryptocompare.com
无关,所以我不明白为什么要发布node.js服务器代码,因为
streamer.cryptocompare.com
是第三方websocket服务器。我这样做是为了测试一些东西。例如,我正在构建一个webapp,它将在本地服务器上手动更新。我想我只是认为REST和Websocket服务器不会有太大区别。但同时,我也在学习一个教程。我认为localhost:4000是一个客户端,我正在尝试将它连接到websocket APIM,但没有收到任何错误。。。localhost:不是localhost:
var express = require('express')
var socket = require('socket.io')
var app = express()

var server = app.listen(4000, function(){
    console.log("well met")
})



app.use(express.static('public'))

var io = socket(server)

io.on('connection', function(socket){
    console.log('well met from socket connection', socket.id)
})