【发布时间】:2017-03-05 01:10:38
【问题描述】:
我将使用 socket.io 在我的 Angular/nodejs 应用程序中添加一些 websockets 功能。
最终目的是在服务器上保留一个“实时”数组,这些数组不可用于编写文档(因为其他人正在编辑它们)。但是我从 socket.io 聊天示例开始,我很快就陷入了困境。
我确定我在这里遗漏了一些微不足道的东西。
$scope.sendMessage() 不发射任何东西..
前面
html
<input type="text" class="form-control" placeholder="message" name="message" ng-model="message"> <button type="button" ng-click="sendMessage()"> sendMessage </button>
socket.io 被封装在一个服务中
app.factory('socket', function ($rootScope) {
var socket = io.connect();
return {
on: function (eventName, callback) {
socket.on(eventName, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(socket, args);
});
});
},
emit: function (eventName, data, callback) {
socket.emit(eventName, data, function () {
var args = arguments;
$rootScope.$apply(function () {
if (callback) {
callback.apply(socket, args);
}
});
})
}
};
});
控制器
$scope.messages=[]
socket.on('init', function (data) {
});
socket.on('send:message', function (message) {
console.log("send:message")
$scope.messages.push(message);
});
$scope.sendMessage = function () {
console.log("send:message")
socket.emit('send:message',$scope.message);
$scope.messages.push($scope.message);
};
服务器
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io')(server);
io.on('connection', function (socket) {
console.log('a user connected');
socket.on('disconnect', function () {
console.log('user disconnected');
});
socket.on('send:message', function (message) {
console.log('send:message:'+message);
socket.broadcast.emit('send:message', {
text:message
});
});
});
【问题讨论】:
-
服务器肯定应该在“receivemessage”上放置一个处理程序,因为它将接收它,而不是发送它?
-
在“发射事件”中阅读socket.io/get-started/chat 我不确定我的代码有什么问题
-
好的,有道理。连接是否正常?它在什么时候停止工作?您是否收到浏览器控制台错误?表达控制台错误?
-
我在服务器控制台上看到“用户已连接”,但没有别的。我不确定问题是客户端上的
emit(send:message)还是服务器上的处理程序socket.on('send:message')。完全没有错误。 -
它是否在您发送时写入浏览器控制台?
标签: angularjs node.js express socket.io