Nodejs 感谢Google!标题字太少,补全

Nodejs 感谢Google!标题字太少,补全

之前从来没有深入研究过js(主要都是服务器端开发), node.js更是一片空白。前一段因为工作需要开始研究SVG绘图,使用的Raphael作为js类库,开始关注js一些东西。 看了几天,给我最大的震撼就是, node.js要逆天了,Javascript要逆天了!web应用的天是什么?对绝大多或者说使用Java, PHP, .NET作为服务器端编程语言的应用来说,天就是线程并发。 node.js的逆天,很大程度上要感谢Google的V8 引擎,居然可以把Javascirpt翻译成和C++一样的效率,所以这也是题目为什么是感谢Google.

最初的震撼过去后,有两个问题一直困扰着我:

  1. 倘若node.js足够成熟了,如何处理数据库端的瓶颈?
  2. 现在node.js还是不很成熟,现在的话,什么样的应用适合用node.js?

其实我的想法就是,现在来看,很少涉及数据库或者不涉及的数据库的应用适合。另外,像我们一般的web应用,几万到几十万并发用集群来处理更经济实惠(人员,培训,现有代码等等很多因素来看)。所以我觉得可能百万以上的并发会更适合现在就使用node.js吧。

如果数量级在数千万以上的公司,我相信都有一套自己内部使用的程序效率和成熟度应该都会高于node.js,比如google。

不知道node.js会不会特别适合做游戏服务器,想象一下Html5, Javascrpit, WebGL做的游戏前台,node.js做的后台…真是逆天了。

刚刚开始研究node.js,观点可能比较幼稚,但是完全是我的接触node.js的第一感觉。


3 回复

Nodejs 感谢Google!标题字太少,补全

前言

之前从来没有深入研究过JavaScript(主要都是服务器端开发),Node.js更是一片空白。前一段时间因为工作需要开始研究SVG绘图,使用的Raphael作为JS类库,开始关注JavaScript的一些东西。

初次震撼

看了几天,给我最大的震撼就是Node.js要逆天了,JavaScript要逆天了!Web应用的天是什么?对于绝大多数使用Java、PHP、.NET作为服务器端编程语言的应用来说,天就是线程并发。

Node.js的逆天,很大程度上要感谢Google的V8引擎,居然可以把JavaScript翻译成和C++一样的效率。因此,这也是题目为什么是“感谢Google”。

问题与思考

最初的震撼过去后,有两个问题一直困扰着我:

  1. 倘若Node.js足够成熟了,如何处理数据库端的瓶颈?
  2. 现在Node.js还是不是很成熟,什么样的应用适合用Node.js?

数据库瓶颈

Node.js虽然在处理并发方面表现出色,但在处理数据库操作时,可能会遇到瓶颈。这主要是因为Node.js的异步特性在某些场景下会导致回调地狱(Callback Hell),使得数据库操作变得复杂且难以维护。

示例代码:

const mysql = require('mysql');

// 创建数据库连接
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'test'
});

// 执行查询
connection.query('SELECT * FROM users', (err, results) => {
  if (err) throw err;
  console.log(results);
  // 关闭连接
  connection.end();
});

应用场景

现在来看,很少涉及数据库或不涉及数据库的应用适合使用Node.js。另外,像我们一般的Web应用,几万到几十万并发用集群来处理更经济实惠(人员、培训、现有代码等很多因素来看)。所以我觉得可能百万以上的并发会更适合现在就使用Node.js。

示例应用场景:

  • 实时聊天应用
  • 实时数据分析
  • 高并发的API服务

未来展望

如果数量级在数千万以上的公司,我相信都有一套自己内部使用的程序,其效率和成熟度应该都会高于Node.js,比如Google。不过,Node.js在某些特定领域,如游戏服务器,可能会有独特的优势。

示例代码:

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', ws => {
  ws.on('message', message => {
    console.log(`Received: ${message}`);
    // 广播消息给所有客户端
    wss.clients.forEach(client => {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });
});

结论

刚刚开始研究Node.js,观点可能比较幼稚,但是完全是我的接触Node.js的第一感觉。尽管如此,Node.js在处理高并发、实时数据等方面确实有很大的潜力。

希望以上内容能够帮助你更好地理解Node.js的优势和应用场景。


pomelo:网易的nodejs游戏引擎 网易已经在做

Node.js 感谢Google!标题字太少,补全

背景

之前从来没有深入研究过JavaScript(主要都是服务器端开发),Node.js更是从未接触过。最近由于工作需要,开始研究SVG绘图,并使用了Raphael作为JavaScript库。在研究过程中,我对JavaScript有了更多的了解。

感受

看了几天的材料,让我最大的感受就是:Node.js要逆天了,JavaScript要逆天了!Web应用的核心是什么?对于大多数使用Java、PHP或.NET作为服务器端编程语言的应用来说,核心就是线程并发。

Node.js 的逆天之处

Node.js之所以强大,很大程度上要归功于Google的V8引擎,它能将JavaScript代码转换为与C++相当的效率。这也是题目中提到感谢Google的原因。

遇到的问题

在这之后,我遇到了两个主要问题:

  1. 数据库端瓶颈

    • 问题描述:当Node.js足够成熟时,如何处理数据库端的瓶颈?
    • 解决方案:可以使用诸如mongoosesequelize等ORM框架来优化数据库操作。此外,还可以考虑使用连接池和缓存机制(如Redis)来减少数据库访问频率。

    示例代码:

    const mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true, useUnifiedTopology: true });
    
    const db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function() {
      console.log("Connected to MongoDB!");
    });
    
  2. 适用场景

    • 问题描述:目前Node.js是否已经足够成熟,适合哪些类型的应用?
    • 解决方案:现在看来,Node.js最适合用于轻量级的、IO密集型的应用,例如API服务、实时聊天应用、数据流处理等。对于涉及大量数据库操作或复杂计算的应用,可能还需要进一步评估。

    示例代码:

    const express = require('express');
    const app = express();
    
    app.get('/', (req, res) => {
      res.send('Hello World!');
    });
    
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
    

总结

刚刚开始研究Node.js,观点可能比较幼稚,但这是我初次接触Node.js的感受。我认为,在当前阶段,Node.js最适合应用于IO密集型场景,尤其是在需要高并发能力的情况下。未来随着技术的发展,Node.js的应用场景可能会更加广泛。

希望上述内容对你有所帮助!如果你有更多的问题或想深入了解某个方面,欢迎继续探讨。

回到顶部