socket.io与express.js混淆

时间:2016-07-29 02:17:46

标签: javascript node.js express socket.io

服务器端代码:

var server = require("http").Server(express);  
var io = require("socket.io")(server);
server.listen(5000);

io.on('connection', function(client) {

  client.on('order', function(data) {
      io.emit('place_order',data); 
  });
});

cilent side code

var socket = io.connect('http://localhost:5000');
 socket.on('place_order', function (data) {alert('data.x')})

在github的某个地方我git克隆一个项目,我看到了上面的东西。服务器端代码的第3行让我很困惑。为什么作者在这里创建额外的端口?丢弃第3行是不是可以,而在cilent方面只是连接到没有像var socket = io.connect('http://localhost:5000');这样的端口的路径?需要解释socket.io专家,我很困惑。

顺便说一句,这段代码确实有效..

3 个答案:

答案 0 :(得分:0)

  

为什么作者在这里创建了额外的端口?

您必须在某个端口上启动服务器,server.listen(nnn)是一种方法。如果您没有启动服务器,它实际上并没有运行,您也无法连接它。

必须创建服务器,然后在特定端口上启动服务器。

在您的特定代码示例中,您选择在端口5000而不是更常见的端口80上运行服务器。

  

不能丢弃第3行

没有。没有它,您的服务器将无法运行。

如果您的服务器是在端口80上启动的,那么您不必在URL中列出端口号,因为这是http://连接的默认端口号。

答案 1 :(得分:0)

update附加到HTTP服务器后,需要启动它。这个套接字如何工作。这就是第3行的作用。因此,删除它意味着您不是自己启动服务器,显然这不起作用。

端口位于5000,对您来说可能看起来非常规,但如果.directive('replaceWithChart',function($compile){ return { restrict: 'A', scope: { chartData: '=replaceWithChart', height: '=', width: '=' }, compile: function(element){ var canvasModel = angular.element('<canvas></canvas>'); return { post: function postLink(scope,elem,attr){ elem.empty(); var canvas = canvasModel.clone(); elem.append($compile(canvas)(scope)); !scope.height && (scope.height = elem[0].style.height || (elem[0].offsetHeight || elem[0].clientHeight)); !scope.width && (scope.width = elem[0].style.width || (elem[0].offsetWidth || elem[0].clientWidth)); var chart = new Chart(canvas[0].getContext('2d'),scope.chartData); canvas.attr('height',(canvas[0].style.height = scope.height + 'px')); canvas.attr('width',(canvas[0].style.width = scope.width + 'px')); scope.$watch('chartData.update',function(){ scope.chartData.update && !(scope.chartData.update = false) && chart.update(); }); elem.on('$destroy',chart.destroy.bind(chart)); // Fixed some rendering issue, but I can't remember which window.setTimeout(function(){ var padding = elem[0].style.padding || (window.getComputedStyle(elem[0],null).getPropertyValue('padding')); elem[0].style.padding = '0'; elem[0].style.padding = padding; chart.resize(); },300); // Magic number - I found this worked best } }; } }; }) 正在使用中,这是防止错误的标准做法,就像通常由其他基于Web /互联网的应用程序/服务器一样。但是,如果不是这种情况,可以通过将第3行替换为socket.io来自由地将端口更改为80

对于参考:如果您收到错误:PORT 80然后直接了解该端口不是免费的!

答案 2 :(得分:0)

这不是socket.io的问题。在Node.js应用程序中,您需要指定您希望Node.js运行的端口。

Node.js是一种平台,在第一行中您创建了一个服务器,为此您需要放置服务器运行的端口。

https://nodejs.org/dist/latest-v6.x/docs/api/http.html#http_http