2016-03-22 5 views
0

У меня есть один скрипт python, который испускает данные на моем сервере node.js каждый раз при восстановлении нового значения.ReferenceError: socket не определен

Вот мой код на стороне клиента (питон скрипт):

from socketIO_client import SocketIO 

... 

def update_db(dateUpdate, res, nameIndex): 
    try: 
     with SocketIO('192.168.100.103', 8080) as socketIO: 
      socketIO.emit('newValues', res) 

    except Exception as e: 
     print "error socketIO - Impossible to emit data \n" 

    #Update database 

while True: 
    #If new value 
     dateUpdate = time.strftime('%Y-%m-%d %H:%M:%S') 
     update_db(dateUpdate, res, nameIndex[i]) 
     break 

Вот мой node.js сервер:

var path = require('path'); 
var fs = require('fs'); 
var mysql = require("mysql"); 
var express = require('express'); 

var app = express(); 

var server = app.listen(8080); 
console.log('Server listening on port 8080'); 

var io = require('socket.io')(server); 

io.sockets.on('connection', function() { 
    console.log("client connected"); 

    socket.on('newValues', function (data) { 
      console.log("new values : "+data);  
    }); 
}); 

Проблема:

Eache раз мой питон скрипт получил новый данных и должны выдать сообщение. Мой узел сервера остановится и отобразит эту ошибку:

node server.js 

Server listening on port 8080 
client connected 
C:\project\src\server\server.js:26 

socket.on('newValues', function (data) { 
    ^

ReferenceError: socket is not defined 
    at Namespace.<anonymous> (C:\project\src\server\server.js:26:5) 
    at emitOne (events.js:90:13) 
    at Namespace.emit (events.js:182:7) 
    at Namespace.emit (C:project\node_modules\socket.io\lib\nam 
espace.js:206:10) 
    at C:\project\node_modules\socket.io\lib\namespace.js:174:14 

    at nextTickCallbackWith0Args (node.js:452:9) 
    at process._tickCallback (node.js:381:13) 

Кто-нибудь знает об ошибке?

ответ

4

сокет не определен. Вам необходимо передать сокет в свою функцию обратного вызова io.sockets.on.

io.sockets.on('connection', function (socket) { //Pass socket here 
    console.log("client connected"); 

    socket.on('newValues', function (data) { 
     console.log("new values : "+data);  
    }); 
} 

Редактировать: Это мое первое предположение о наилучшем решении вопроса. Я не очень опытен с sockets.io. Я просто смотрю на документы (есть аналогичный пример по этой ссылке) http://socket.io/docs/

0

Когда вы пишете

socket.on('newValues' , ...) 

Это предполагает, что "гнездо" является переменной. И если это так, это не было определено до этого вызова.

Я не знаю IO хорошо, но попробуйте вместо этого:

io.sockets.on('newValues' , ...) 
Смежные вопросы