2014-12-01 2 views
0

Я отправляю некоторые данные на свой сервер WebSocket, который иногда дает мне некоторые странные символы, обычно вызываемые последним »(может быть совпадением, что он всегда является последним) Помещение пробела между этими символами решает проблему. Я предпочел бы получить это право, но не полагаться на своих клиентов, реализующих это пространство (на всякий случай есть другие комбо, которые могут привести к нежелательным данным).Проблема с кодировкой символов JavaScript WebSocket (текст)

Пример JSON строку Я посылаю в моей связи WebSocket является:

{ 
    "action": "query", 
    "tag": "test", 
    "sql": "SELECT * FROM settings WHERE param = 'test'" 
} 

сервер WebSocket получает:

{ 
"action": "query", 
"tag": "test", 
"sql": "SELECT * FROM settings WHERE param = 'test'"b} 

Я попытался отправить как данные одной строки, что не решает проблему. Один из клиентов написан на JavaScript, а другой на C++, оба имеют эту же проблему. В зависимости от того, что есть в одинарных кавычках, я получаю другой результат.

Код для моего теста клиента JavaScript следующим образом:

var socket = new WebSocket("ws://localhost:3399"); 
socket.onmessage = function (e) { 
    console.log(e.data); 
    document.querySelector("#response").innerHTML = e.data; 
}; 

function sendMessage() { 
    var ws_message = document.querySelector("#ws_message").value; 
    socket.send(ws_message); 
} 

И WebSocket сервер Node.js:

connections[connection_id].on('message', function (message) { 
    if (message.type === 'utf8') { // accept only text 
     try { 
      var args = JSON.parse(message.utf8Data); 
      handleActions(args, connection_id); 
     } catch (e) { 
      serverLog(connection_id, "Message not formatted correctly"); 
     } 
    } 
}); 

Любая помощь будет высоко ценится!

EDIT: Это меняется каждый раз, когда я отправить его ...

{ 
    "action": "query", 
    "tag": "test", 
    "sql": "SELECT * FROM settings WHERE param = 'fullscreen'" 
R 


{ 
    "action": "query", 
    "tag": "test", 
    "sql": "SELECT * FROM settings WHERE param = 'fullscreen'" 
5 

EDIT 2: Даже создание массива данных о клиенте и с помощью JSON.stringify вызывает тот же вопрос.

Server Log:

[1/12/2014 13:57:39] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM `settings` WHERE param = 'fullscreen��} 
[1/12/2014 13:57:39] (conn: 1) Message not formatted correctly 
[1/12/2014 13:57:44] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM `settings` WHERE param = 'fullscreen��} 
[1/12/2014 13:57:44] (conn: 1) Message not formatted correctly 
[1/12/2014 13:57:46] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM `settings` WHERE param = 'fullscreen��} 
[1/12/2014 13:57:46] (conn: 1) Message not formatted correctly 
[1/12/2014 13:57:47] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM `settings` WHERE param = 'fullscreen�P} 
[1/12/2014 13:57:47] (conn: 1) Message not formatted correctly 
[1/12/2014 13:57:48] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM `settings` WHERE param = 'fullscreen�} 
[1/12/2014 13:57:48] (conn: 1) Message not formatted correctly 
[1/12/2014 13:57:48] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM `settings` WHERE param = 'fullscreen�} 
[1/12/2014 13:57:48] (conn: 1) Message not formatted correctly 
[1/12/2014 13:57:49] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM `settings` WHERE param = 'fullscreen��} 
[1/12/2014 13:57:49] (conn: 1) Message not formatted correctly 
[1/12/2014 13:57:49] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM `settings` WHERE param = 'fullscreen�/} 
[1/12/2014 13:57:49] (conn: 1) Message not formatted correctly 
[1/12/2014 13:57:50] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM `settings` WHERE param = 'fullscreen�S} 
[1/12/2014 13:57:50] (conn: 1) Message not formatted correctly 

EDIT: Buffer использовать журналы

81daf101eb988a238afb856884f6d33bc9e9846499e1d32dc9ec9066c9a2d3758eeb8523c7ba827087bacb23b8ddbd44a8ccd12bcbdea34ea6b882649fec986f8cebd156a3dda344cbe890738af5d13ccbbf977487f4826299fd946fcca3d37c 
[2/12/2014 07:52:45] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM settings WHERE param = 'fullscreen';?} 
[2/12/2014 07:52:45] (conn: 1) Message not formatted correctly 
81daf3487331886a125287211c5fd1725140862d0148d1645145922f510bd13c1642876a5f1380391f13c96a2074bf0d3065d3625377a1073e11802d07459a261442d31f3b74a10d5341923a125cd3755316953d1f5d802b01549626540ad135 
[2/12/2014 07:52:57] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM settings WHERE param = 'fullscreen';?} 
[2/12/2014 07:52:57] (conn: 1) Message not formatted correctly 
81da9a516309e173026aee380c67b86b4178ef341170b87d417dfb364133b825067aee734f2be9200f2ba073304cd614205dba7b434fc81e2e29e934177df33f047aba062b4cc8144379fb230264ba6c432efc240f65e932116cff3f4432b82c 
[2/12/2014 07:52:58] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM settings WHERE param = 'fullscreen';?} 
[2/12/2014 07:52:58] (conn: 1) Message not formatted correctly 
81da6415b90a1f37d869107cd664462f9b7b1170cb7346399b7e05729b304661dc79103795281764d5285e37ea4f2850fa5e443f994c365af42a1770cd7e0d7bde794442f14f3650997a0567d8674428992d0260d5661776cb6f017b9e314668 
[2/12/2014 07:52:59] (conn: 1) Received Message: {"action":"query","tag":"test","sql":"SELECT * FROM settings WHERE param = 'fullscreen';F} 
[2/12/2014 07:52:59] (conn: 1) Message not formatted correctly 
+0

Какое websocket lib вы используете на сервере? –

+0

Я использую здесь «node-sqlite3» [https://github.com/mapbox/node-sqlite3](https://github.com/mapbox/node-sqlite3) – trvo

+0

Это база данных. Может быть, https://github.com/einaros/ws? –

ответ

0

Этой проблема была решена с помощью команды обновления НОГО - моя установка библиотеки был 5 дней и обновление пошло 3 дня назад, который, похоже, разобрал его.

Смежные вопросы