abd*_*oud 3 node.js socket.io sails.js
我在理解从Sails.js客户端控制器发送socket.io事件并在服务器端控制器中处理它们的概念时遇到问题.首先,我使用npm下载了SailsJS项目框架,结构如下:
项目:
api
--adapters
--controllers
----server_userController.js
--models
--polices
--services
assets
--[styles, views, images, bower_components, and etc]
--js
----controllers
------userController.js
----app.js
----sails.io.js
----socket.io.js
config
node_modules
views
Run Code Online (Sandbox Code Playgroud)
我在"assets/js/controllers/server_userController.js"中写了以下内容:
socket.emit('getUser', {
_id: 10
});
Run Code Online (Sandbox Code Playgroud)
现在,如何指定哪个服务器端控制器负责处理此事件,以及如何处理?我希望在"api/controllers/server_userController.js"中收到此事件.所以,这样的东西将在控制器中:
module.exports = {
//Handling socket request here
//Emitting socket request
};
Run Code Online (Sandbox Code Playgroud)
提前致谢
sgr*_*454 20
如果您要做的只是通过套接字运行Sails控制器操作,那么您根本不需要emit任何操作.Sails的一部分魅力在于它可以通过套接字路由常规的HTTP样式请求.所以如果你有一个/api/controllers/FooController.js像这样的控制器:
module.exports = {
bar: function (req, res) {
// Note, you can check whether this was a socket request
// with req.isSocket, and if so access the connecting
// socket with req.socket
res.json({"message": "Hello!"});
}
}
Run Code Online (Sandbox Code Playgroud)
并且您将捆绑的sails.io.js文件包含在客户端应用程序中,然后您可以通过以下方式访问该操作:
socket.get('/foo/bar', function(data) {
// data will contain {message:"hello"}
}
Run Code Online (Sandbox Code Playgroud)
注意:如果您使用的sails.io.js是Sails v0.10.x中包含的较新版本,那就是io.socket.get.
如果您真的想在服务器上捕获套接字事件,那么注册它们的最佳位置是在您的/config/socket.js文件中,onConnect方法如下:
onConnect: function (socket, session) {
socket.on('some_event', function(data) {
// handle event here
});
}
Run Code Online (Sandbox Code Playgroud)
这比将事件处理程序放在控制器中更好,因为控制器操作运行的任何时候都会再次绑定事件,并且您会看到回调被多次运行.
| 归档时间: |
|
| 查看次数: |
8072 次 |
| 最近记录: |