Сервер веб-сокета Primus не смог прочитать сообщение от клиента
Я использую Primus для создания сервера веб-сокетов. И я использую команду wscat для тестирования этого сервера. Он может подключиться к серверу веб-сокетов. Но сервер не может получать сообщения от клиента. Ниже приведен код Primus:
http = require('http');
server = http.createServer();
Primus = require('primus');
primus = new Primus(server, {
transformer: 'websockets',
pathname: 'ws'
});
primus.on('connection', function connection(spark) {
console.log("client has connected");
spark.write("Herro Client, I am Server");
spark.on('data', function(data) {
console.log('PRINTED FROM SERVER:', data);
spark.write('receive '+data)
});
});
server.listen(5431);
console.log("Server has started listening");
И ниже, как я это проверил:
$ wscat -c http://localhost:5431/ws
connected (press CTRL+C to quit)
< "Herro Client, I am Server"
> hello
>
Из приведенных выше команд видно, что клиент может получить сообщение при запросе соединения. Но затем я посылаю "привет" на сервер, и клиент не получает сообщение обратной связи от сервера. И сервер также не печатает сообщение "привет". Что-то не так с моим кодом? Кажется, что spark.on('data', function(data)
метод не имеет никакого эффекта.
1 ответ
Вы выдавали ошибку, не отправив действительные данные JSON на сервер.
об ошибке: "Не удалось декодировать входящие данные: неожиданный токен a в JSON в позиции 0"
Попробуй это:
http = require('http');
server = http.createServer();
Primus = require('primus');
primus = new Primus(server, {
transformer: 'websockets',
pathname: 'ws'
});
primus.on('initialised', function() {
console.log('Primus Initialized.');
});
primus.on('connection', function connection(spark) {
console.log("client has connected");
spark.write("Herro Client, I am Server");
spark.on('data', function(data) {
console.log('PRINTED FROM SERVER:', data);
spark.write('received');
});
spark.on('heartbeat', function() {
console.log('hearbeat...');
});
//happens after primus.disconnection
spark.on('end', function() {
console.log('spark end');
});
spark.on('error', function (v) {
console.log('spark error', v);
});
});
//happens before spark.end
primus.on('disconnection', function (spark) {
console.log('primus disconnection');
});
primus.on('error', function error(err) {
console.log('primus error', err.stack);
});
server.listen(5431);
Это сработало для меня, как показано ниже:
$ wscat -c 127.0.0.1:5431/ws/websocket
connected (press CTRL+C to quit)
< "Herro Client, I am Server"
> {"a":"b"}
< "received"
> {"valid":"json"}
< "received"