Почему socket.emit не работает внутри socket.on? - PullRequest
0 голосов
/ 18 января 2020

Я знаю, что эта проблема неоднократно поднималась в стеке потока. Я пробовал использовать все другие решения для работы со стеком, но ни одно из них не работает для меня. У меня есть сервер сокета nodejs, который получает какое-то сообщение и в зависимости от какого-либо условия выдает другое событие. Вот детали используемых пакетов:

  • @ types / express ":" ^ 4.17.2 "
  • @ types / node": "^ 13.1.7" ,
  • @types/socket.io ":" ^ 2.1.4 "
  • " express ":" ^ 4.17.1 "
  • " socket.io " : "^ 2.3.0"

server.ts

import * as socketio from "socket.io";
import * as express from "express";
import * as http from "http";

const app = express();  
const server = http.createServer(app);  
const io = socketio(server);


io.on("connection", (socket) => {  
    console.log("A user has connected to the socket!");
    socket.on('disconnect', () => console.log('A user has disconnected from the socket!'));

    socket.on('message', function (data) {
        console.log('Message received : ' + data);
        // socket.emit('C1', data);
        // io.sockets.emit('C1', data);
        // socket.broadcast.emit('C1', data);
        // io.emit('C1', data);
      });

    socket.on('C1', (data) => {
        console.log("Data received on C1 : " + data);
    });
});

server.listen(3000, () => {  
    console.log(`Application listening on port ${process.env.PORT || 3000}!`);
});

Я попытался использовать все закомментированные методы emit (), которые я нашел на другие решения для работы со стеком, но ни одно из них не работает для меня

 // socket.emit('C1', data);
 // io.sockets.emit('C1', data);
 // socket.broadcast.emit('C1', data);
 // io.emit('C1', data);

Я использую Python клиент с пакетом pip socketIO-client-nexus 0.7.6

client.py

import logging
import time
from socketIO_client_nexus import SocketIO, LoggingNamespace

while True:
    time.sleep(0.5)
    with SocketIO('localhost', 3000, LoggingNamespace) as socketIO:
        socketIO.emit('message',"hello world")

Мой python клиент работает нормально, и я могу получить сообщение "hello world" на моем сервере узлов. Однако, когда я пытаюсь выдает то же сообщение с событием "C1", ничего не происходит.

Если у кого-то есть идеи, как решить эту проблему, вы очень приветствуете.

Спасибо.

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