Socket.io和Redis写Realtime App 这个系列视频中,一定要手动去运行node socket.js?

看完这个系列视频,我不太懂得是难道我每次在本地运行项目,还要先手动输入node socket.js这个命令?
还有修改了socket.js文件后也需要重新输入这个命令,麻烦。
那如果部署到线上环境呢,是不是也要手动输入这个命令,然后一直保持这这个命令的运行么(我从来没部署过线上环境) 不过这样实在太麻烦了吧。

不用的,可以直接使用工具管理,比如 pm2 就可以。作为 daemon 运行就好

JellyBool

不用的,可以直接使用工具管理,比如 pm2 就可以。作为 daemon 运行就好

Aaron-wlh 回复 JellyBool

出了一个问题,安装完pm2后,运行命令pm2 start socket.js --name tank,然后不用运行node socket.js可以达到你视屏里的效果了。
但如果我运行了node socket.js后就会出现如下报错:

vagrant@homestead:~/Code/larabbs$ node socket.js
events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE :::3000
    at Object.exports._errnoException (util.js:1018:11)
    at exports._exceptionWithHostPort (util.js:1041:20)
    at Server._listen2 (net.js:1258:14)
    at listen (net.js:1294:10)
    at Server.listen (net.js:1390:5)
    at Object.<anonymous> (/home/vagrant/Code/larabbs/socket2.js:20:6)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:389:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:504:3

我换了一个新项目,然后运行这个Node命令还是报错。我把上个项目放入pm2的进程杀死后,新项目运行才正常了。jelly大神知道这是什么原因嘛?

HectorChan 回复 Aaron-wlh

什么时候出个开发电商平台的实战啊?

Aaron-wlh 回复 JellyBool

还有一个问题 --, 项目里面用到了队列,而且设置了守护进程,结果导致我用事件广播的时候运行node命令,但是socket.js接受不到数据。如果是下面这种就可以接收到数据:

$data = [
			'event' => 'aNewMessage',
			'data' => [
			'name' => 'Jelly'
		]
		];

		\Redis::publish('test-channel', json_encode($data));

救命啊, 想弄个即时回复怎么这么难。。

charlie

应该可以用pm2来管理node进程 http://pm2.keymetrics.io/

Aaron-wlh

懂了,谢谢两位的解答,非常感谢~