Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点websocket服务器类型错误:参数必须是字符串_Javascript_Node.js_Websocket - Fatal编程技术网

Javascript 节点websocket服务器类型错误:参数必须是字符串

Javascript 节点websocket服务器类型错误:参数必须是字符串,javascript,node.js,websocket,Javascript,Node.js,Websocket,我在ubuntu上跟踪一个/var/log/logfile,得到一个TypeError。在我的本地Mac机器上工作/var/log/system.log 命令: sudo node server.js/var/log/logfile(必须是sudo才能查看此日志文件) 错误: /npm/node_modules/node-websocket-server/lib/ws/connection.js:290 var byteLen = Buffer.byteLength(data, 'utf

我在ubuntu上跟踪一个/var/log/logfile,得到一个TypeError。在我的本地Mac机器上工作/var/log/system.log

命令:

sudo node server.js/var/log/logfile(必须是sudo才能查看此日志文件

错误:

/npm/node_modules/node-websocket-server/lib/ws/connection.js:290
    var byteLen = Buffer.byteLength(data, 'utf8'),
                         ^
TypeError: Argument must be a string
    at Connection.<anonymous> (/npm/node_modules/node-websocket-server/lib/ws/connection.js:290:26)
    at clientWrite (//npm/node_modules/node-websocket-server/lib/ws/server.js:34:12)
    at /npm/node_modules/node-websocket-server/lib/ws/server.js:99:7
    at Manager.forEach (/npm/node_modules/node-websocket-server/lib/ws/manager.js:125:14)
    at Server.broadcast (npm/node_modules/node-websocket-server/lib/ws/server.js:98:13)
    at Socket.<anonymous> (/npm/server.js:63:11)
    at Socket.emit (events.js:64:17)
    at Socket._onReadable (net.js:677:14)
    at IOWatcher.onReadable [as callback] (net.js:177:10)
/npm/node_modules/node websocket server/lib/ws/connection.js:290
var byteLen=缓冲区byteLength(数据'utf8'),
^
TypeError:参数必须是字符串
在连接处。(/npm/node_modules/node websocket server/lib/ws/connection.js:290:26)
在clientWrite(//npm/node_modules/node websocket server/lib/ws/server.js:34:12)
at/npm/node_modules/node websocket server/lib/ws/server.js:99:7
在Manager.forEach(/npm/node_modules/node websocket server/lib/ws/Manager.js:125:14)
在Server.broadcast(npm/node_modules/node websocket Server/lib/ws/Server.js:98:13)
在插座上。(/npm/server.js:63:11)
位于Socket.emit(events.js:64:17)
在套接字上可读(net.js:677:14)
在IOWatcher.onReadable[作为回调](net.js:177:10)
代码:

/*
*server.js
*/
var util=require('util');
var sys=要求(“sys”);
var ws=require(“/npm/node_modules/node websocket server”);
var spawn=require('child_process')。spawn;
var filename=process.ARGV[2];
如果(!filename)
返回系统puts(“用法:节点”);
var server=ws.createServer({debug:true});
/*
*服务器启动后
*/
server.addListener(“侦听”,函数(){
sys.log(“在本地主机上侦听连接:9997”);
});
/*
*定义任何端口
*/
服务器监听(9997);
var tail=spawn(“tail”,[“-f”,文件名]);
系统看跌期权(“开始跟踪”);
tail.stdout.on(“数据”),函数(数据){
/* 
*发送数据
*/
服务器、广播(数据);
控制台日志(“”+数据);
});

目前,节点websocket服务器只接受字符串形式的数据,而不接受缓冲区形式的数据。缓冲区将来可能会被接受,这主要是由于帧的限制以及我不想进行大量缓冲区复制的事实。(仅向套接字写入0xFF或0x00似乎是不负责任的)

另外,试着做:

var tail = spawn('tail', ['-f', filename]);

tail.stdout.setEncoding('utf8')
由于stdout和stderr的流默认为不编码,这意味着数据事件会发出缓冲区对象。至于为什么这在你的mac上有效,但在ubuntu上失败,我不确定,但刚才做了一个快速测试,如果我没有特别设置流的编码,我让ubuntu和mac都给我缓冲区对象

var tail = spawn('tail', ['-f', filename]);

tail.stdout.setEncoding('utf8')