Socket.io и Express не отправляют данные - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь использовать socket.io для подключения к этому websocket api:

https://www.cryptocompare.com/api/#-api-web-socket-

(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>

index.js:

var socket = io('wss://streamer.cryptocompare.com')
console.log('connected')
var btn = document.getElementById('connect-sock')
var btn2 = document.getElementById('disconnect-sock')
var show = document.getElementById('data-show')
     //I also tried adding an event listener to a button so when i clicked it, it would do this:
socket.emit('SubAdd', { subs: ['0~Poloniex~BTC~USD'] } )
    //Same result of nothing.
socket.on('SubAdd', function(data){
     console.log(data)
})

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 на http://localhost:4000,, я получаю socket.id в консоли ... не уверен, что там происходит.

Редактировать: Я редко получаю идентификатор сокета при использовании wss: //streamer.cryptocompare.com/, иногда да, в большинстве случаев я этого не делаю. Обычно это работает, когда я переключаюсь на localhost, запускаю сервер, останавливаю сервер, затем переключаюсь обратно на стример, но если я перезагружаюсь, я больше не получаю socket.id.

Я подумал, что все, что я просил, чтобы это было здесь, - это отправка subs в wss: //streamer.cryptocompare, а затем console.log (data), который он возвращает после генерации sub.

я что-то здесь упускаю?

Извините, если очевидно, что я что-то упустил. Я знаю о socket.io только 3 дня, и только сегодня я просмотрел базовое руководство по YouTube.

1 Ответ

0 голосов
/ 26 июня 2018

Вам не нужен код Express, потому что в этом случае сервер, с которым вы хотите общаться, находится на сервере cryptocompare, а не на локальном сервере. Это фиксируется в вашем коде при инициализации объекта io в файле HTML.

Конечно, вы все равно можете использовать Node для общения с API-интерфейсом cryptocompare websockets, если вам удобнее работать с Node. Но тогда вам не понадобится JavaScript в браузере. В любом случае, вам нужно создать своего рода клиента в любой среде выполнения, который говорит на веб-сокетах и ​​может взаимодействовать с API-интерфейсом криптосопротивления веб-сокетов.

Что касается пропускаемого кода - вы правы! Это. socket.io - это четная структура. Это означает, что клиенты регистрируют свою заинтересованность в определенных видах событий / сообщений, и когда они запускаются, вызываются специальные функции, известные как обратные вызовы.

Если это поможет, вы можете думать о таких событиях как о каналах в чате - если вы находитесь не в той комнате, вы не увидите сообщения для этой комнаты. Поэтому вам нужно знать, какие сообщения вы должны прослушивать, зарегистрировать свой интерес к ним и зарегистрировать функции обратного вызова для каждого из них.

К счастью, cryptocompare предоставил примеры клиентского кода, которые должны помочь вам понять, какие типы сообщений вы должны прослушивать. Смотри здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...