服务器端代码:
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专家,我很困惑。
顺便说一句,这段代码确实有效..
答案 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