nodejs 适用于IO密集型不适用CPU密集型

高CPU消耗的app:

尽管我喜欢node.js,却有很多的用例是不靠谱的。最显而易见的用例是那种CPU使用率高同时I/O操作小的。所以如果你打算写一个视频编码软件,人工智能软件或者类似的CPU使用率高的软件,请不要用node.js。要是你肯稍微变通一下,用C或C++效果会更好。
话虽这么说,node.js允许你很轻松的写C++扩展,所以你可以把它作为一个你核心算法的脚本引擎。

简单的CRUD / HTML apps

尽管可以说node.js是个写各种web程序的不错的工具,你也不该期待它在这点上能比PHP,Ruby或Python带给你更多的好处。是的,你的app也许最终会多一点可扩展性,可是不会因为你是用node.js写的就会神奇般的的带来更多的访问量。
事实是,当我们去看node.js的好的框架时,目前还没有并没有比Rails, CakePHP或者Django更强大的应用场景。如果你的app只是简单的基于一些数据库做HTML的渲染,使用node.js不会给你显而易见的好处。

NoSQL + Node.js + 各种扯淡的时髦词汇

如果你的下一个app的架构读起来像一个NoSQL做配料的菜谱,请花点时间读读下面的内容。
是的,Redis, CouchDB, MongoDB, Riak, Casandra等等确实诱人,但是夏娃的红苹果也一样难以抗拒。如果你准备用node.js来冒一次技术风险,你就不该再加上更多的你没有完全理解的技术。
确实,有一些文档数据库的合理的用例,但是如果你准备在你的软件上建立一个商业环境,坚持那些保守点的数据库技术(像postgres或mysql)也许胜过于你满足你迂腐的技术观,也胜过于只是让你的朋友觉得你很牛。

好的用例

JSON API

建立轻量级的REST / JSON api正是node.js的亮点。如果你要包上你的数据库操作或web服务,同时通过JSON把接口暴露出来,node.js的无阻塞模型和JavaScript技术让它成为你非常好的一个选择。

单页的app

如果你打算写一个AJAX操作非常多的单页面app(比如gmail),node.js是非常合适的。在极短的响应时间内处理大量请求的能力,不同的客户端共享像确认信息之类的东西,这些都让node.js成为那种在客户端做很多处理的web程序的很好的选择。

对unix工具的脚本化调用

node.js现在还很年轻,它正在试图为自己重新发明各种软件,不过更好的办法是深入到现有的广阔的命令行工具世界里。Node.js拥有产生数以千计的子进程的能力,同时可以把这些子进程的输出以流的方式处理,这让它成为那种和现有软件寻求平衡时的很好的选择。

流数据

传统的web程序讲http请求和响应作为元事件处理。可事实是它们是流,很多很酷的node.js程序正是利用这个优点创建的。最牛的例子是实时解析上传文件,还在不同的数据层建立了代理。

软件实时程序

node.js另一个很大的方面是你可以很轻松的开发软实时系统。这是指那些像twitter,聊天软件,体彩或实时通讯网络的接口。

但是这里你得注意了,因为JavaScript的动态垃圾回收特性,你得到的响应次数是依赖于你多频繁以及多久触发垃圾回收机制(此时你的程序停止了)。所以不要试图在node里建立硬实时系统,那需要永远一致的响应时间。Erlang在这一类的程序上应该是更好的选择。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Socket.IO 是一个基于 Node.js 的实时网络库,它使得在客户端和服务器之间建立实时、双向通信变得容易。它提供了一个 WebSocket 的替代品,允许在不支持 WebSocket 的浏览器中使用轮询、长轮询和其他技术来实现实时通信。 Socket.IO 的 API 很简单,它提供了一个用于在客户端和服务器之间发送事件的消息传递机制。您可以通过监听事件来处理来自客户端和服务器的消息,并使用 emit() 方法向客户端和服务器发送消息。 在 Node.js 中使用 Socket.IO 时,您需要使用 socket.io 模块。您可以使用 npm 安装: ``` npm install socket.io ``` 然后,在您的应用程序中,您可以使用以下代码创建 Socket.IO 服务器: ```javascript const http = require('http'); const server = http.createServer(); const io = require('socket.io')(server); io.on('connection', (socket) => { console.log('a user connected'); socket.on('disconnect', () => { console.log('user disconnected'); }); }); server.listen(3000, () => { console.log('listening on *:3000'); }); ``` 这个例子创建了一个 HTTP 服务器并使用 Socket.IO 将其升级为实时服务器。当客户端连接时,'connection' 事件被触发。您可以监听此事件并处理来自客户端的消息。 在客户端,您需要使用以下代码来连接到 Socket.IO 服务器: ```javascript <script src="/socket.io/socket.io.js"></script> <script> const socket = io(); socket.on('connect', () => { console.log('connected'); }); socket.on('disconnect', () => { console.log('disconnected'); }); </script> ``` 这个例子使用客户端 Socket.IO 库连接到服务器。当连接成功时,'connect' 事件被触发。您可以监听此事件并开始向服务器发送消息。 在客户端和服务器之间发送消息非常简单。您可以使用 emit() 方法从客户端向服务器发送消息,也可以使用 socket.emit() 方法从服务器向客户端发送消息。例如,在客户端,您可以使用以下代码向服务器发送消息: ```javascript socket.emit('chat message', 'Hello, world!'); ``` 在服务器上,您可以监听 'chat message' 事件并处理来自客户端的消息: ```javascript io.on('connection', (socket) => { socket.on('chat message', (msg) => { console.log('message: ' + msg); }); }); ``` 这个例子监听 'chat message' 事件并打印从客户端发送的消息。 这只是 Socket.IO 的一小部分功能,您可以在官方文档中了解更多:https://socket.io/docs/

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值