01/10/2018, 09:39

Nodejs - Làm sao để thực thi code ngay cả khi không có request?

Giả sử e muốn viết 1 chương trình hẹn giờ, khi đến thời gian đã hẹn thì sẽ thực hiện hành động nào đó mặc dùng ko có request nào đến server. Các bác cho e hỏi có cách nào để làm được việc đó ko ??

Zhang Jike viết 11:53 ngày 01/10/2018

Bạn tìm hiểu websocket nhé. Nodejs bạn tìm hiểu về socket.io sẽ giải quyết được vấn đề của bạn. Về cơ bản websocket sẽ giữ kết nối cho bạn. Chữ không như kết nối http thông thường là bạn send request, server handle r trả về response là ngắt kết nối.

Đào An viết 11:48 ngày 01/10/2018

setInterval(hàm cần chạy, thời gian)
https://nodejs.org/api/timers.html

Storm viết 11:45 ngày 01/10/2018

Nếu dùng socket.io thì vẫn phải có 1 user trực trên server hả bác ??

Le Hoai viết 11:47 ngày 01/10/2018

chủ thớt đang cần làm hẹn giờ chứ ko phải là socket bạn à:d

Le Hoai viết 11:53 ngày 01/10/2018

Không cần bạn nhé. Bạn có thể tưởng tượng viết nó như 1 app console sử dụng setInterval or setTimeout thôi.

Đào An viết 11:49 ngày 01/10/2018

1.Thằng socket.io bản chất là dùng ajax liên tục để handle realtime --> tốn băng thông chứ ko phải websocket đâu. Giờ các trình duyệt hầu hết đã hỗ trợ websocket nên dùng luôn chứ khỏi dùng socket.io.
2. Hình như thớt hỏi ý khác

Storm viết 11:55 ngày 01/10/2018

e tưởng socket.io dựa trên websocket @@ vừa xem live của thầy khoapham nói thế mà

Storm viết 11:52 ngày 01/10/2018

Nếu dùng setInterval thì có hại gì đến server ko bác ? với cả nếu có 1 người on hay 100 người on trên server thì cái setInterval có khác nhau gì ko ?

Đào An viết 11:55 ngày 01/10/2018
  1. Socket.io sinh ra là để trình duyệt cũ từ IE6,IE8 cũng dùng được realtime, do đó nếu ko có nhu cầu hỗ trợ các trình duyệt này thì có thể bỏ qua socket.io dùng luôn websocket. Nó dựa trên ajax để support mấy trình duyệt cũ http://stackoverflow.com/questions/19903646/web-socket-support-in-node-js-socket-io-for-older-browser
  2. setInterval ko liên quan gì đến số lượng user truy cập vào web, viết code chạy thử là hiểu à
Storm viết 11:40 ngày 01/10/2018

Sao e chạy đoạn code này nó cứ ra 4 dòng log vậy bác ?? cứ 5s ra 4 dòng @@


Tiện thể e dùng server của thằng openshift. nó có cái file start.js này e ko hiểu lắm có tác dụng gì

const cluster = require('cluster'),
      stopSignals = [
        'SIGHUP', 'SIGINT', 'SIGQUIT', 'SIGILL', 'SIGTRAP', 'SIGABRT',
        'SIGBUS', 'SIGFPE', 'SIGUSR1', 'SIGSEGV', 'SIGUSR2', 'SIGTERM'
      ],
      production = process.env.NODE_ENV == 'production';

let stopping = false;

cluster.on('disconnect', function(worker) {
  if (production) {
    if (!stopping) {
      cluster.fork();
    }
  } else {
    process.exit(1);
  }
});

if (cluster.isMaster) {
  const workerCount = process.env.NODE_CLUSTER_WORKERS || 4;
  console.log(`Starting ${workerCount} workers...`);
  for (let i = 0; i < workerCount; i++) {
    cluster.fork();
  }
  if (production) {
    stopSignals.forEach(function (signal) {
      process.on(signal, function () {
        console.log(`Got ${signal}, stopping workers...`);
        stopping = true;
        cluster.disconnect(function () {
          console.log('All workers stopped, exiting.');
          process.exit(0);
        });
      });
    });
  }
} else {
  require('./app.js');
}
Đào An viết 11:52 ngày 01/10/2018

Bạn đang chạy trong cluster mode chạy nhiều instance (có thể coi là đa luồng), bạn có thể thấy nó log ra là có 4 worker ko ?? nên nó ra 4 dòng là đúng rồi. File kia để cấu hình server cluster đó.
Nếu chưa nắm chắc thì cứ viết hoàn chỉnh app chạy localhost thôi, rồi sau đó triển khai lên server sau cũng được mà

Storm viết 11:42 ngày 01/10/2018

E hiểu rồi. tks bác nhiều ạ

Bài liên quan
0