KEVIN Schmid: Xin chào tất cả mọi người. Chào mừng đến với hội thảo CS50 trên Node.js. Tôi tên là Kevin. Tôi là một TF CS50. Và tôi là loại giống như thực sự vui mừng về buổi hội thảo này. Tôi nghĩ rằng Node.js là rất mát mẻ. Tôi hy vọng rằng hội thảo này có thể được sử dụng như một tốt, tôi đoán, đạp cho một số dự án cuối cùng của bạn nếu bạn quan tâm trong việc sử dụng một cái gì đó như Node.js. Chúng tôi sẽ loại bắt đầu buổi hội thảo bằng cách chỉ nói về một chút của loại khả năng mở rộng nền quan điểm của Node.js, và sau đó chúng tôi sẽ chuyển đến một số ví dụ mã. Và tôi sẽ có mã trên một trang web, và bạn có thể nhìn vào mã. Và sau buổi hội thảo, tôi sẽ sắp xếp buổi nói chuyện về cách bạn có thể thiết lập Node.js trên máy tính của bạn. OK. Vì vậy, chúng ta hãy bắt đầu. Vì vậy, tôi đoán tôi chỉ muốn nói về các máy chủ web, thực sự, đầu tiên. Và bắt đầu thảo luận này, tôi về cơ bản có một sơ đồ mà là từ sách giáo khoa được sử dụng để CS61, mà cơ bản cho thấy sự tương tác giữa một quá trình khách hàng, như web của bạn trình duyệt hoặc như khách hàng mục tiêu của bạn hoặc như thế, và một máy chủ web. Vì vậy, đây loại trông giống như hình ảnh mà bạn đã thấy trong bài thuyết trình về Thứ tư nơi về cơ bản chúng tôi có một số quá trình khách hàng như Google Chrome. Và sau đó bước một là khách hàng gửi một yêu cầu. Vì vậy, đó có thể là một cái gì đó như cũng hãy thăm, tôi không biết, CS50.net. Vì vậy, chúng tôi phát hành yêu cầu đó. Và không ai nhớ tên của giao thức để xác định cách mà Yêu cầu phải được cấu trúc? Vâng. ĐỐI TƯỢNG: [nghe được]. KEVIN Schmid: Chính xác. Vì vậy, nó giống như HTTP, phải không? Vì vậy, về cơ bản là đặc điểm kỹ thuật như thế nào yêu cầu mà thực sự phải được đặt ra, bởi vì vào cuối ngày, yêu cầu đó là thực sự giống như một chuỗi cơ bản nói rằng tôi muốn điều này. Và đặc điểm kỹ thuật cho đó là HTTP. Vì vậy, đó như một giao thức. Vì vậy, sau đó máy chủ nhận được yêu cầu đó. Vì vậy, các bạn có một máy chủ web cài đặt trong thiết bị CS50. Đó là Apache. Và trong tuần này khi bạn làm việc về vấn đề thiết lập bảy, bạn sẽ thực sự được làm việc với máy chủ web. Vì vậy, các máy chủ nhận được yêu cầu đó, và sau đó nó phải loại xước của nó đầu và nói như những gì tốt Tôi phải làm với điều này? Vì vậy, dựa trên những gì nó quyết định làm, sau đó nó có thể có liên hệ với một số loại tài nguyên. Và nguồn tài nguyên đó có thể là một rất nhiều thứ khác nhau. Đối với một, nó có thể chỉ như một tập tin HTML tĩnh. Vì vậy, nó chỉ có thể được như một số HTML là thích trang web cá nhân của bạn. Nó có thể là một tập tin tĩnh như một hình ảnh hoặc như một bộ phim mà bạn có. Nó thậm chí có thể phải nói chuyện một số loại cơ sở dữ liệu giống như một cơ sở dữ liệu MySQL. Vì vậy, nó không luôn luôn phải giao tiếp với một nguồn tài nguyên, nhưng trong một số trường hợp, nó có thể. Vì vậy, sau đó những gì nó sẽ làm gì sau đó là nó sẽ gửi lại phản ứng. Và đáp ứng cho điều này là cũng quy định của HTTP. Vì vậy, sau đó khách hàng có thể nhận được nó. Nó có thể xé nó ra và xử lý nó. Và sau đó bạn nhận được một trang web như Google hay CS50.net hoặc bất cứ điều gì bạn đã đi đến. OK? Vì vậy, đây là sự tương tác cơ bản chúng ta sẽ được xử lý. Và chúng tôi khá nhiều sẽ tập trung vào phần này của tương tác, máy chủ. OK. Mát mẻ. Ai có bất cứ câu hỏi cho đến nay? OK. Vì vậy, như chúng tôi đã nói, máy chủ web nhận yêu cầu HTTP này và sau đó vấn đề này Đáp ứng HTTP. Và như chúng ta đã nói trước đây, Máy chủ web thiết bị CS50 là Apache. Vì vậy, khi các bạn làm việc trên P thiết lập bảy, bạn sẽ được làm việc với các Máy chủ web Apache. Bạn sẽ không bao giờ phải thực sự làm việc với Apache trực tiếp quá nhiều. Bạn loại cấu hình Apache một chút khi bạn chỉ định các máy ảo hoặc đội chủ nhà v, và chúng tôi sẽ nhận được cho rằng trong một chút. Nhưng về cơ bản, các máy chủ web Apache thiết lập để làm việc với PHP loại của ra khỏi hộp. Vì vậy, những gì thực sự xảy ra khi bạn đi là với một trong các trang web của bạn như, nói, địa phương chủ index.php dấu gạch chéo hoặc một cái gì đó, là trình duyệt của bạn gửi mà yêu cầu, và sau đó Apache đang ngồi ở đó và con số ra để làm với nó. Và hành động này là để thực hiện mã trong index.php và sau đó gửi nó đi trở lại. Vì vậy, có đó. Vì vậy, chúng tôi loại nói về điều này. Vì vậy, nó chỉ có thể phục vụ cho một tập tin tĩnh hoặc chạy một số mã PHP và sau đó vấn đề các phản ứng. Vì vậy, sau đó một câu hỏi phổ biến mà có thể đến lên là tốt, làm thế nào để chúng tôi thực sự đối phó với việc có nhiều người sử dụng cùng một lúc? Vì vậy, hãy tưởng tượng nếu bạn đang viết một trang web máy chủ, nếu bạn đã có một máy chủ web bạn đã cố gắng để viết một cái gì đó trong như C hay như thế, về cơ bản bạn có thể suy nghĩ về làm thế nào có có thể là một số loại mã sẽ nhận được yêu cầu, nhưng sau đó nó đã làm tất cả các công việc này vào nó. Nó có thể có, ví dụ, liên hệ với cơ sở dữ liệu hoặc một cái gì đó như thế. Phải không? Và sau đó nó sẽ làm loại mà chế biến và sau đó gửi lại các phản ứng. Vì vậy, đó là giống như cao tổng quan về mức độ. Nhưng nó không phải là ngay lập tức rõ ràng làm thế nào bạn có thể làm điều đó để hai người hoặc thậm chí 1.000 người có thể làm việc với bạn máy chủ web cùng một lúc. Vì vậy, các giải pháp mà Apache sử dụng được gọi là chủ đề hoặc quá trình. Vì vậy, bạn có thể đã nghe nói về các điều khoản trước đây. Đó là OK nếu bạn có không, nhưng chỉ cần nghĩ về chủ đề hoặc các quá trình như cách cho một hệ điều hành hay một chương trình sử dụng hoặc một cái gì đó như thế hoặc một máy chủ web để loại thực hiện nhiều việc cùng một lúc. Vì vậy, bạn có thể đã nghe thuật ngữ như chủ đề thực hiện. Vì vậy, nó giống như bạn loại đa nhiệm. Và nếu bạn đã nhìn thấy trên hộp của bạn máy tính xách tay, hoặc một cái gì đó như thế, đa lõi, những gì bạn có thể làm là bạn có thể chạy hai chủ đề khác nhau trên khác nhau các bộ phận của CPU để họ có thể thực sự xảy ra cùng một lúc. Vì vậy, đây thực sự là mạnh mẽ. Và đây là loại Apache giải pháp cho vấn đề này. Như vậy là có loại giống như bất kỳ vấn đề với cách tiếp cận này mặc dù? Vì vậy, tôi đoán tôi loại đã viết chúng ở đó. Nhưng cả hai loại sử dụng rất nhiều bộ nhớ. Nó rất tốn kém để tạo ra một chủ đề hoặc một quá trình. Và một phần của lý do là chỉ giống như khi bạn đang chạy một chương trình C như chính bạn và sau đó các cuộc gọi chức năng khác, có một số loại stack. Vì vậy, chủ đề này cũng đòi hỏi một hoàn toàn riêng chồng mà có thể khá lớn. Và nếu bạn có thể tưởng tượng có tấn người sử dụng trên trang web của bạn, bạn sẽ phải rất nhiều chủ đề khác nhau. Đó là rất nhiều ngăn xếp để quản lý và duy trì. Vì vậy, nó tiêu thụ bộ nhớ lớn. Và sau đó, cũng có thể, chúng ta hãy nói rằng bạn chỉ có một CPU, hoặc chúng ta hãy nói rằng bạn có nhiều chủ đề hơn bạn có những multicores. Phải không? Vì vậy, hãy nói rằng bạn đã có 10 chủ đề và bạn chỉ có năm CPU. Bạn loại phải làm điều này, nơi bạn chuyển đổi giữa hiện tại một trong đó là chạy vì bạn không thể chạy tất cả 10 cùng một lúc. Và đó được gọi là một chuyển ngữ cảnh. Và thời hạn mà thực sự đã có một vài bối cảnh khác nhau, nhưng chúng ta hãy chỉ nghĩ về nó như chuyển đổi giữa hai chủ đề. Đó có thể là khá tốn kém vì về cơ bản những gì bạn phải làm là bạn phải dừng lại những gì bạn đang làm, tiết kiệm trạng thái mà thread đang chạy, và sau đó chuyển sang một nơi khác. Vì vậy, tất cả mọi người không loại xem động lực của lý do tại sao chủ đề và quá trình có thể là một ít cồng kềnh? Và bạn đã có một câu hỏi? OK. Mát mẻ. Ai có bất cứ câu hỏi? OK. Vì vậy, nếu chúng ta đi một bước lại một giây, có loại giống như một quan sát chúng tôi có thể làm cho khoảng rất nhiều các ứng dụng web. Và đó là thực sự là rất nhiều trong số họ thực sự không làm điều đó rất hữu ích làm việc bên trong của một chủ đề. Vì vậy, có ai bắt đầu P thiết lập bảy ở tất cả? Vì vậy, bạn muốn để có thể mô tả một số bộ phận? Bạn đã làm việc trên đăng nhập hoặc một cái gì đó như thế? ĐỐI TƯỢNG: số KEVIN Schmid: OK. Không sao đâu. Xin lôi. Nhưng về cơ bản, trong tập P, bạn sẽ được thực hiện rất nhiều loại truy vấn đến một cơ sở dữ liệu để có được một số thông tin từ cơ sở dữ liệu. Và những gì mã của bạn sẽ được làm, những gì mà quá trình Apache hoặc Apache chủ đề sẽ được làm trong khi nó có liên hệ với các cơ sở dữ liệu là nó loại sẽ ngồi đó và nó sẽ là chờ đợi cho các cơ sở dữ liệu để trả lời. Bây giờ mà có thể không âm thanh như một lớn đối phó vì cơ sở dữ liệu trên của bạn Thiết bị CS50, phải không? Nhưng có một số loại mạng độ trễ có bởi vì bây giờ các trang web máy chủ có cấp theo yêu cầu riêng của mình để cơ sở dữ liệu để giao tiếp với cơ sở dữ liệu và sau đó nhận được rằng thông tin trở lại. Vì vậy bây giờ nó giống như cũng chờ đợi tôi, tôi sẽ đi được một cái gì đó từ cơ sở dữ liệu và sau đó có một rất nhiều chờ đợi xảy ra. Điều đó có ý nghĩa? Và cho một số điều nó không phải là xấu. Nếu nó chỉ có, ví dụ, bộ nhớ truy cập, đó là không thích khủng khiếp I / O độ trễ. Và khi tôi nói, I / O độ trễ, những gì tôi đề cập đến là giống như bất kỳ loại như đầu vào đầu ra. Tuy nhiên, để truy cập vào một tập tin trên đĩa, như nếu tôi muốn phục vụ tĩnh HTML tập tin mà là trên trang web của tôi hoặc một cái gì đó như thế, tôi loại phải dừng lại một chút, đọc tập tin đó từ đĩa, và sau đó trong quá trình mà tôi đang chờ đợi. Tôi không làm công việc hữu ích. Đây không phải là thực sự của tất cả mọi thứ, nhưng nó là phổ biến trong các ứng dụng như P bộ bảy và rất nhiều ứng dụng rằng bạn không thực sự làm nhiều suy nghĩ. Và khi tôi nói suy nghĩ, tôi có nghĩa như công việc tính toán. Vì vậy, việc tính toán có thể là một cái gì đó như, nói, bạn muốn viết một máy chủ web mà chỉ tính số Fibonacci thứ n. Điều đó không có âm thanh như một đặc biệt máy chủ web thú vị. Như tôi không mong chờ trang web đó được Facebook tiếp theo, nhưng đó là một số loại công việc tính toán. Và bạn có thể tưởng tượng thay thế mà với một số loại khác thú vị công việc tính toán. Hãy nói rằng bạn đang viết một cái gì đó đó tính toán mức độ tách biệt giữa hai người hoặc một cái gì đó như thế. Vì vậy, điều đó không liên quan đến một số loại tính toán, phải không? Và thậm chí sau đó, để làm điều đó bạn vẫn có làm rất nhiều chờ đợi cho có thể bạn phải truy vấn một cơ sở dữ liệu để tìm lên người là bạn bè với những người hoặc một cái gì đó như thế. Do đó là loại khái niệm công tác tính toán. Điều đó có ý nghĩa? Không ai có bất kỳ câu hỏi? Oh và tôi đoán tôi đặt máy chủ trò chuyện có bởi vì các máy chủ trò chuyện là loại một ví dụ tốt về điều này. Một máy chủ chat không có làm nhiều suy nghĩ. Nó chỉ có chờ đợi để mọi người gửi tin nhắn và sau đó khi họ, gửi cho họ. OK? Như vậy chỉ cần tóm tắt lại một lần nữa, Apache và các máy chủ web tương tự như thế ngã ba một rất nhiều chủ đề và các quá trình đó có thể được loại lãng phí. Vì vậy, tôi đoán câu hỏi mà có thể đến từ đó là chúng ta cần phải có nhiều chủ đề và các quy trình? Những gì nếu chúng ta chỉ có một? Vì vậy, hãy loại vẽ một bức tranh của điều này sẽ như thế nào. Vì vậy, hãy sử dụng chỉ có một thread. OK? Vì vậy, chỉ cần tưởng tượng này với một chủ đề. Chúng ta hãy giả sử chúng tôi đã không thực sự làm mà nhiều hữu ích - và khi tôi nói hữu ích, tôi có nghĩa là công việc tính toán - trong những nhiều chủ đề trước. Vì vậy, hãy loại củng cố tất cả mọi thứ vào một sợi. Vì vậy, nếu chúng ta có một sợi loại mà chỉ đi xung quanh trong vòng lặp và liên tục kiểm tra đã làm một cái gì đó mới xảy ra. Vì vậy, ví dụ, một cái gì đó mới xảy ra có thể có nghĩa là tôi có một cái gì đó trở lại từ cơ sở dữ liệu, hoặc ai đó gửi tôi một yêu cầu HTTP mới. Vì vậy, đó là những loại sự kiện điều đó xảy ra, phải không? Và sau đó những gì tôi có thể làm gì khi những người mới sự việc xảy ra là trong cùng một chủ đề này thực hiện, chủ đề này duy nhất thực hiện, tôi có thể gọi một số mã sẽ xử lý mà điều đặc biệt. Ví dụ, nếu tôi có một cái gì đó trở lại từ cơ sở dữ liệu, tôi có thể chạy của tôi một phần nhỏ tính toán của nó mà thực sự chỉ cần chuẩn bị các điều gửi lại cho người sử dụng. Vì vậy, không có loại ý nghĩa? Nhưng những gì đang thực sự ý nghĩa của điều này? Phải không? Bởi vì chúng tôi đã viết rất nhiều mã - và tôi chỉ cần đi để nhảy về phía trước trong các slide nếu đó là OK. Vì vậy, nếu bạn không nhớ, tôi chỉ sẽ lùi lại một bước. Vì vậy, loại điều là được gọi là một vòng lặp sự kiện. OK? Và đó là loại cơ bản Ý tưởng đằng sau Node.js. Vì vậy, những gì Node.js thực sự làm như một trang web máy chủ là có một chủ đề duy nhất mà về cơ bản là đi xung quanh trong một vòng lặp như một trong khi một loại dưới mui xe của Node.js đó là liên tục kiểm tra, chúng tôi nhận được đã điều mới? Và sau đó nó sẽ chạy bộ xử lý mà bạn thiết lập. Nhưng một câu hỏi hay để hỏi là, làm thế nào chúng ta có thể thực hiện điều này với những thứ hiện tại? Vì vậy, tôi đặt một dòng mã C ở đây là về cơ bản trông giống như nó mở nộp, phải không? Tôi Cô ấy chỉ xuất hiện với một album. Vì vậy, tôi đã phải mở cho cô một tập tin mới. Vì vậy, cách mã C của chúng tôi cho các hoạt động - và tôi đoán là lý do tôi đã chọn các tập tin đã bởi vì đây là loại mức độ các công việc I / O mà chúng tôi đã thực hiện trong C trong một cảm giác rằng có đầu vào đầu ra. Vì vậy, chúng ta gọi mã này mà không e này mở. Và sau đó trên dòng tiếp theo của chúng tôi chương trình, chúng ta có thể làm việc với f. Vì vậy, đây sẽ là một ví dụ về một cái gì đó đó là như đồng bộ hoặc ngăn chặn bởi vì trên dòng đầu tiên có chúng tôi đang chờ đợi cho đến khi chúng tôi được mở tập tin. Vì vậy, trên dòng thứ hai, chúng tôi biết rằng chúng tôi có thể làm việc với e, nhưng điều này có nghĩa là dòng thứ hai có thể không thực sự chạy cho đến khi dòng đầu tiên được thực hiện. Điều đó có ý nghĩa? Vì vậy, đây sẽ là xấu để đặt trong một xử lý sự kiện. Và lý do cho điều đó là loại chờ đợi, phải không? Vì vậy, điều này sẽ trở lại chúng ta trở lại để điều tương tự. Và bây giờ chúng tôi thậm chí không có lợi ích của nhiều chủ đề hay quá trình bởi vì chúng tôi có một thread trong Node.js. Điều đó có ý nghĩa với tất cả mọi người? ĐỐI TƯỢNG: Chờ. Vì vậy, việc thay thế là gì? KEVIN Schmid: Oh, vậy có. Vì vậy, tôi sẽ nhận được để người vào thay. OK. Vì vậy, nếu chúng ta có một cái gì đó trông như thế này? Vì vậy, nếu bây giờ tôi chỉnh sửa f mở một chút? Vì vậy, tôi đi qua trong cùng một hai đối số như trước. Tôi vẫn yêu những bài hát mới rằng cô đã cho ra đời. Nhưng tôi đang đi qua một điều thứ ba được biến này được gọi là mã. Nhưng là những gì đang thực sự trong bối cảnh này? Là nó giống như một biến C thường xuyên? Đó là một chức năng, phải không? Và đó có thể là một chút lạ vì Tôi thực sự như bây giờ đi qua một hoạt động vào chức năng khác. Vì vậy, một vài điều cần lưu ý về việc này. Một, tôi không thực sự kêu gọi chức năng mã. Vì vậy, bạn không nhìn thấy mã với dấu ngoặc trái, dấu ngoặc phải. Tôi chỉ đi qua trong mã. Và trong C, điều này sẽ thực sự làm được cung cấp cho tôi một con trỏ với thực tế mã, và sau đó điều này có thể chạy nó. Nhưng chỉ cần nghĩ về nó như bạn đi qua các mã để chạy khi tập tin đó được mở ra. Nhưng điều này có nghĩa là bây giờ phần còn lại của chương trình của tôi có thể làm công cụ khác, có thể tiếp tục làm khác thứ trong khi chúng ta, không thực sự chờ đợi, nhưng chỉ có ở mặt sau của đầu của chúng tôi khi của tập tin mở, chạy mà mã ở đầu trang. Điều đó có ý nghĩa? Và bây giờ ý tưởng đằng sau Node.js là mã trong các công cụ làm với f một phần nên được khá ngắn và đơn giản và đơn giản và không thực sự được rất tính toán chuyên sâu. Nó có thể có để mở một tập tin, nhưng mà cũng nên được khá nhanh chóng bởi vì nó chỉ nên nói làm e khác mở và sau đó gọi mã khác này. Vì vậy, chỉ để được hoàn toàn rõ ràng, f mở mà không được hát Katy Perry mới done mp3, đó là sẽ khá nhiều trở lại ngay lập tức. Và sau đó chúng tôi chỉ có thể tiếp tục làm công cụ khác bởi vì tất cả những gì bây giờ f mở cuộc gọi, không có gì nói về cơ bản mã mở f cơ bản mở tập tin này và khi bạn đang thực hiện mở này file hoặc khi bạn nhận được nó trở lại, sau đó chạy mã. Nhưng nó không thực sự chạy mã. Và bạn đã có một câu hỏi? ĐỐI TƯỢNG: Bạn đã cho thấy một vài lần rằng việc thêm tính toán đang tích cực loại phá vỡ Hệ thống điều khiển [không nghe được]. [Nghe được]? KEVIN Schmid: Đó là một câu hỏi lớn. Vì vậy, tôi thực sự có một ví dụ về cách bạn có thể tích hợp tính toán đang tập trung trong một chút. Vì vậy, khi chúng tôi đến được với các ví dụ mã, Tôi chắc chắn sẽ kéo một. Là OK? Cảm ơn bạn. Tên của bạn là gì? ĐỐI TƯỢNG: Aaron. KEVIN Schmid: Aaron sẽ trả về một rất điểm tốt, đó là nếu tôi đã có một số mã tính toán mạnh trong các công cụ làm với e phần, phần còn lại của chương trình của tôi không thể chạy và không thể nghe yêu cầu mới hoặc bất cứ điều gì cho đến khi tất cả thứ đã xong. Vì vậy, nếu tôi viết mã Node nói chung trừ khi chúng ta làm điều gì đó như tôi sẽ cho thấy sau khi chúng ta nhìn vào ví dụ mã, tôi có thể chắc chắn rằng mã của tôi không tie lên vòng lặp sự kiện này. Điều đó có ý nghĩa? OK. Mát mẻ. Vì vậy, Node.js cung cấp khuôn khổ này mà bạn có thể xây dựng các sự kiện hướng máy chủ với. Vì vậy, nó có các loại không đồng bộ non-blocking I / O thư viện, trong khi các thư viện C chuẩn mà chúng tôi đã được làm việc với, như nếu bạn chỉ sử dụng chúng trong cùng một cách mà chúng tôi đã được sử dụng chúng với e sẽ mở ra và công cụ, những người đang chặn vì bạn thực sự phải chờ tập tin đó để mở. Nhưng Node.js cung cấp cho bạn đó và nó về cơ bản gắn vào động cơ V8 của Google Công cụ JavaScript đó là lý do Chrome là quá nhanh tại xử lý JavaScript bởi vì nó có động cơ V8 này. Vì vậy, tôi biết rằng âm thanh như một trong những WWDC hội nghị nhà phát triển điều nơi họ chỉ cần ném một bó của điều số thư cho bộ vi xử lý và nói rằng đây là rất mát mẻ. Nhưng nó là mát mẻ mà họ đã làm này vì JavaScript - hoặc có thể nếu bạn không quen thuộc với JavaScript chưa bởi vì chúng tôi đã không có các bài giảng về nó - nhưng JavaScript là một giải thích ngôn ngữ. Và đây là một điểm quan trọng. Vì vậy, điều quan trọng cho web của chúng tôi là các máy chủ được nhanh chóng, đúng không? Và nếu chúng ta chỉ cần chạy JavaScript mã đã được giải thích chỉ với bất kỳ thông dịch viên cũ nó có thể được làm chậm. Vì vậy, lợi ích từ việc này Node thông dịch viên động cơ V8 siêu nhanh. Và tôi không biết nếu họ đặt tên cho nó vì cái tát V8 ở trán điều, nhưng OK. Vì vậy, tôi đã chuẩn bị một số ví dụ tại URL này. Sau buổi hội thảo, tôi loại đi nói về cách bạn có thể nhận được Node bộ lên, nhưng bây giờ, tôi chỉ muốn loại đi bộ qua một số ví dụ mã. Vì vậy, nếu bạn muốn theo cùng, tất cả các Mã nguồn có sẵn ở đó. OK? Vì vậy, tôi sẽ để lại URL này cho một chút. Và sau đó tôi chỉ cần đi đến chuyển vào thiết bị đầu cuối. Là tất cả mọi người tốt với URL này? Vì vậy, tôi sẽ chuyển sang để thiết bị đầu cuối của tôi ở đây. Vì vậy, đây là đoạn code mà Tôi có ngày hôm nay. Tại sao chúng ta không bắt đầu với simpler.js nộp? Điều khác là tất cả điều này đang có được viết bằng Mà JavaScript bạn có thể hoặc có thể không được quen thuộc. Tôi đoán một vài điều là rất nhiều mã JavaScript là loại cú pháp và cấu trúc rất giống với C, vì vậy bạn có thể loại nhặt nó lên như bạn đi cùng. Tôi đã cố gắng để viết rất nhiều bắt đầu từ mã cho điều này trong một cách đó là tương tự như C để nó nhiều hơn một chút có thể đọc được. Nhưng khi chúng tôi tiến bộ, tôi sẽ chứng minh một số bổ sung tính năng của JavaScript là loại mát mẻ. Nhưng hãy nhìn vào chương trình mẫu này. Tôi đoán mọi việc cắt đó. Tôi chỉ cần đi để sửa chữa thực sự nhanh nếu đó là OK hay không. Tôi không biết điều này sẽ làm. Là một chút tốt hơn? Bạn sẽ nhìn thấy var và các công cụ? OK. Vì vậy, dòng đầu tiên là như JavaScript phiên bản của một biến kê khai. Vì vậy, chỉ để làm nổi bật những gì sẽ này trông giống như trong C. Vì vậy, đây là giống như chỉ số tôi nói bằng ba hoặc một cái gì đó như thế. Vì vậy, tôi đã không xác định loại. JavaScript không có các loại, nhưng nó rất kiểu động trong tự nhiên, vì vậy không cung cấp bất kỳ loại của các loại trên nó. Vì vậy, nó chỉ có var. Điều đó giống như biến. OK? Và tôi gọi biến HTTP này. Và về phía bên tay phải của tôi, tôi có biểu mà tôi muốn đưa vào HTTP. Và điều này cho biết yêu cầu HTTP. Vì vậy, đây là loại tương tự như bao gồm. Đó là một chút giống như mạnh mẽ hơn bao gồm trong ý nghĩa là bao gồm sẽ chỉ cần sao chép và dán các tiêu đề nộp cho các nguyên mẫu chức năng hoặc bất cứ điều gì với các định nghĩa kiểu. Nhưng đòi hỏi phải được thực sự đi để có được chúng tôi mã. Vì vậy, bạn có thể nghĩ về nó như nhập khẩu một số mã. Vì vậy, ở đâu đó trong các mô-đun Node.js hệ thống hoặc bất cứ điều gì, họ có tất cả điều này Mã máy chủ HTTP vì vậy tôi chỉ lấy nó cho riêng tôi sử dụng cá nhân trong chương trình này. OK? Vì vậy, sau đó tôi có chức năng này mà tôi đã viết. Và thông báo tôi không có chỉ định kiểu trả về hoặc kiểu của lập luận một lần nữa. Vì vậy, loại lỏng gõ vào mà loại cảm giác. Hai đối số mà phải mất trong, các yêu cầu và đáp ứng. Vì vậy, đó là khái niệm giống như quen thuộc từ các hình ảnh mà chúng tôi đã trên màn hình trước khi vì chúng tôi nhận được yêu cầu này, chúng ta có từ người sử dụng. Và sau đó chúng tôi có một phản ứng chúng ta có thể viết những điều để. Vì vậy, dòng đầu tiên của điều này res.writeHead 200 và sau đó điều này loại nội dung văn bản đơn giản. Vì vậy, hãy mảnh này ngoài một chút. Vì vậy, hãy chỉ tập trung vào res.write cho một ít. Vì vậy, về cơ bản là viết, và viết đầu, chỉ là cách để loại viết ra điều cần đáp ứng. OK? Vì vậy, ghi đầu, nếu ai nhớ từ các bài giảng HTTP, làm các bạn nhớ tiêu đề tại đầu điều HTTP? Vì vậy, tại sao tôi không chỉ bản demo tiêu đề thực sự nhanh chóng. Đó sẽ là hữu ích không? Hoặc nên chúng tôi chỉ loại - OK. Chắc chắn. Vì vậy, khi trình duyệt của bạn đi vào google.com hay như thế, có thực sự là nhiều hơn một chút - điều này giống như một bí mật - có như thêm một chút thông tin mà đi qua các đường ống hơn là chỉ tìm kiếm ít và tất cả mọi thứ. Vì vậy, để cho bạn thấy điều này, tôi sẽ sử dụng một chương trình gọi là Curl. OK? Vì vậy, đây là một cái gì đó mà bạn có thể chạy ở dòng lệnh Mac OSX của bạn hoặc trong thiết bị hoặc bất cứ điều gì. Và do đó, nếu tôi Curl HTTP google.com, Tôi sẽ xem HTML. Và điều này là, trong sự công bằng, chỉ cần HTML loại cho bạn chuyển hướng đến www nếu trình duyệt của bạn không tự động xử lý các chuyển hướng. Vì vậy, đây chỉ là HTML, nhưng tôi sẽ để thêm vào Curl dấu gạch nối này gắn cờ. OK? Và điều này sẽ chỉ cho tôi tiêu đề. Vì vậy, đây cũng là thông tin mà đi kèm thông qua khi tôi nhận được phản ứng này. OK? Vì vậy, ở đầu trang, bạn thấy điều này HTTP 301 di chuyển vĩnh viễn. Và đây là loại quan trọng vì này đề cập đến các mã trạng thái. Vì vậy, ở đây là 301 mã trạng thái, đó là cơ bản chỉ là một số nguyên mà nói với các trình duyệt hoặc bất cứ ai là đọc sách này, nếu bạn giả vờ rằng bạn là một trình duyệt và bạn đang nhìn thấy điều này, về cơ bản bây giờ nếu bạn nhìn vào và bạn 301 thấy, bạn biết tôi có làm điều gì đó đặc biệt dựa trên 301, hoặc một cái gì đó đặc biệt đã xảy ra dựa trên 301. Vì vậy, nó nói chuyển vĩnh viễn. Và sau đó, về cơ bản, chúng tôi có một loạt các cặp giá trị quan trọng. Vì vậy chúng tôi có được vị trí là www.google.com. Và sau đó loại của tất cả các công cụ khác này, nhưng về cơ bản, những gì vị trí là nói là vị trí mới là tại www.google.com. Vì vậy, bây giờ nếu bạn đi đến google.com, bạn sẽ loại xem loại trình duyệt của chớp trong một giây và sau đó chuyển hướng bạn quay lại ngay để www.google.com. Vì vậy, các câu trả lời có thể chứa các tiêu đề. Và một vài điều cần chỉ ra. Vì vậy, hãy nói rằng chúng tôi đã thực sự thành công trong truy cập vào một trang web. Vì vậy, hãy để tôi đi đến - một trang web tốt là gì? Tôi xấu tại tư duy tốt các trang web ngay tại chỗ. ĐỐI TƯỢNG: Wikipedia. KEVIN Schmid: OK. Chúng ta hãy làm Wikipedia. Vì vậy, ở đây tôi đã được di chuyển. Oh chờ đợi. Là tôi? Vâng, tôi là. OK. Vì vậy, tôi phải làm www. Vì vậy, tôi sẽ làm www. Và bạn có thể thấy, đây là tất cả các HTML trình duyệt sẽ xử lý cho Wikipedia. Nhưng nếu tôi tiếp tục di chuyển lên đây, những gì tôi sẽ thấy ở đầu - wow, có rất nhiều HTML trên Wikipedia - nhưng những gì tôi có thể nhìn thấy ở phía trên đây là đang 200 tình trạng này như trái ngược với các 301 mà tôi đã thấy trước đó. Và nhận thấy rằng nó có một tốt đẹp thân thiện OK bên cạnh nó. Vì vậy, điều này giống như mã trạng thái tốt. Điều đó có 200 số trông quen thuộc? Có bởi vì khi tôi đã làm simpler.js, Tôi đã viết một 200 đó. Vì vậy, về cơ bản nói cho các trình duyệt hoặc bất cứ ai đang cố gắng để có được này mà họ đã thành công. Hoặc giống như chúng tôi đã thành công quá. Và có loại cú pháp đặc biệt trong Javascript tuyên bố một bản đồ của các phím như loại nội dung và các giá trị như đồng bằng văn bản. Vì vậy, nếu bạn nhìn vào các phản ứng mà chúng tôi đã trở lại từ Wikipedia trước, - Tôi sẽ cố gắng di chuyển lên nhanh hơn một chút - bạn có các phím như máy chủ và các giá trị Apache. Vì vậy, bạn đã có khóa và giá trị. Và bạn có thể chỉ định này trong Node những gì để gửi lại. Vì vậy, đây thực sự là loại, trong một số cách, và trong một số cách nó không thực sự, nhưng đó là một cấp thấp hơn chút hơn so với mã PHP mà bạn có thể viết cho P thiết lập bảy vì PHP và Apache loại chăm sóc của một số những điều này cho bạn. Trong PHP, bạn có thể ghi đè lên mặc định hành vi bằng cách viết tiêu đề của riêng bạn. Nhưng với mục đích này, chúng tôi nhận để viết ra tiêu đề của chúng ta. Vì vậy, hiện dòng đó có ý nghĩa để tất cả mọi người, dòng ghi đầu? OK. Tuyệt vời. Vì vậy, sau đó những gì tôi làm tôi kết thúc phản ứng là bằng cách nói hello thế giới. OK. Nhưng đó chỉ là một chức năng được gọi là yêu cầu xử lý. Vì vậy, bây giờ tôi thực sự phải loại làm một cái gì đó với chức năng này, phải không? Vì vậy, đây là những gì tôi làm là có được này dòng mà không var máy chủ bình đẳng HTTP.create máy chủ, và sau đó tôi vượt qua trong xử lý yêu cầu. Vì vậy, đây là loại Node cách tạo ra một máy chủ. Và thông báo rằng tôi đang đi qua trong xử lý yêu cầu. Vì vậy, đây là nói sự createServer chức năng mà tôi muốn bạn để làm cho tôi một máy chủ, và khi máy chủ nhận được một phản ứng, tôi cần bạn gọi này yêu cầu chức năng xử lý. OK? Vì vậy, dòng khá nhiều kết thúc ngay lập tức. Vì vậy, các dòng máy chủ var được thực hiện ngay sau khi bạn làm điều đó khá nhiều. Ý tôi là, nó đã thiết lập một số nội bộ nhà nước để biết rằng bạn sẽ phải gọi đó là chức năng yêu cầu xử lý, nhưng nó sẽ không ngồi đó và nói có người sử dụng gửi tôi yêu cầu chưa? Người sử dụng đã gửi cho tôi một yêu cầu chưa? Vì vậy, nó không chặn. OK? Vì vậy, điều này sẽ làm điều đó về cơ bản là tại các cửa hàng một con trỏ đến mã này, này chức năng xử lý yêu cầu, và sau đó sẽ chạy mã mà khi ai đó làm cho một yêu cầu. Và sau đó chúng tôi làm server.listen. Các năm 1337 có hơi tùy tiện. Tôi không có lý do đặc biệt để chọn số đó. Đó là hoàn toàn ngẫu nhiên. Nhưng đó chỉ định cổng. Vì vậy, hầu hết các máy chủ web, bạn sẽ thấy rằng họ sử dụng cổng 80 vì đó là loại giống như quy ước. Vì vậy, nếu tôi đi đến một cái gì đó như, Tôi không biết, Wikipedia.org, và tôi đặt dấu hai chấm 8 - oh wow, bạn không thể thấy điều đó. Tôi xin lỗi. Nhưng nếu tôi làm Wikipedia - Tôi sẽ viết nó ở đây chỉ để rõ ràng trên máy ảnh. Nhưng nếu tôi thực hiện việc này vào trình duyệt với một dấu hai chấm 80, chỉ định đi đến Wikipedia.org tại cổng 80. Vì vậy, nó giống như làm thế nào Hoa Kỳ có nhiều cổng giống như nơi mà bạn có thể gửi điều cần loại. Vì vậy, nó giống như đi đặc biệt này đặt trên máy chủ này. OK. Vì vậy tôi chỉ chọn 1337. Có cả một loạt các con số bạn có thể chọn. Đó không phải là hoàn toàn đặc biệt. Nhưng những gì tôi sẽ làm gì bây giờ là tôi sẽ chạy Node. Hãy để tôi thực sự nhập mà một cặp vợ chồng đường xuống để bạn có thể nhìn thấy nó. Tôi sẽ làm Node, và tôi sẽ chạy simpler.js. Và chúng tôi sẽ nói về cách để có được Nút thiết lập trong một chút. Nhưng bây giờ nó chỉ chạy máy chủ. Vì vậy, một điều chúng ta có thể thử mà không được thể là thú vị là chúng ta có thể thực sự cố gắng để truy cập nó trong Curl. Vì vậy, tôi có thể làm Curl, và tôi máy là chủ của địa phương. Bạn cũng sẽ thấy điều này bằng văn bản như thế này đôi khi. Máy chủ và 127.0.0.1 địa phương là loại giống như máy tính ở nhà của bạn. Vì vậy, nó giống như nói chuyện với máy tính của riêng bạn. OK. Và sau đó tôi có thể nói 1337. Vì vậy, nếu tôi chạy dòng mã này, nó nói hello thế giới. Và nếu tôi muốn nhìn thấy những thứ đó mà có loại nội dung văn bản gốc hoặc bất cứ điều gì, tôi thậm chí có thể đặt ở đây. Và nhận thấy rằng nó nói OK. Và tôi có đồng bằng văn bản. Và sau đó có loại của tất cả các khác này thứ mà Node sẽ thêm vào có cho tôi. Đó không phải là siêu quan trọng. Ý tôi là, có một số loại kỹ thuật các khía cạnh của lúc đó là loại mát mẻ để nói về, nhưng chỉ để hiển thị bạn, tôi cũng có quyền thay đổi các xung quanh. Vì vậy, tôi chỉ có thể thêm một bó các công cụ như thế. Và sau đó bây giờ, nếu tôi nhìn vào tôi đầu ra, nó sẽ được điều đó. Vì vậy, các tiêu đề có nghĩa là những thứ nhất định để trình duyệt và những thứ như thế. Và tiêu đề cơ bản có thể nói với một trình duyệt làm thế nào để đáp ứng một cái gì đó. Nếu bạn đã từng nghe nói về các tập tin cookie trước, hoặc nếu bạn đã từng khó chịu bởi một trang web thiết lập các tập tin cookie, hoặc bật cookie hoặc khối một cái gì đó như thế. Bạn thực sự có thể thiết lập các tập tin cookie trong các tiêu đề. Vì vậy, họ cho một trình duyệt như thế nào để hành vi trong một số trường hợp. OK. Vì vậy, đó là simpler.js. Không ai có bất kỳ câu hỏi trên tập tin mã nguồn? OK. Mát mẻ. Vì vậy, hãy loại bỏ các r từ đó và nhìn vào simple.js. Vì vậy, đây là khá nhiều cùng một chương trình. Tôi chỉ viết nó một chút khác nhau bởi vì tôi muốn sắp xếp của nổi bật một số tính năng của JavaScript. Vì vậy, nhận thấy rằng xử lý yêu cầu chức năng đã hoàn toàn biến mất. Oh vâng, bạn đã có một câu hỏi? ĐỐI TƯỢNG: Vâng, các đối số được thông qua với chức năng, chúng là gì? KEVIN Schmid: Vì vậy, những người đang có JavaScript đối tượng. Trong tài liệu Node.js, nó về cơ bản những gì phương pháp có sẵn trên chúng. Chúng tôi chỉ xảy ra để có quyền truy cập vào Phương pháp này được gọi là ghi đầu và kết thúc và các công cụ như thế. Nhưng có cả một bó nhiều phương pháp. Và ví dụ, như một trong số họ đặc biệt là về rec, bạn có thể làm một cái gì đó như rec.method mà sẽ nói cho bạn biết đó là một HTTP được hoặc Bài yêu cầu HTTP và những điều như thế. Do đó, có tất cả các loại khác nhau tài sản, nhưng chúng cả hai JavaScript đối tượng, và họ chỉ có chức năng gắn liền với họ rằng bạn có thể viết những điều để. OK? Vì vậy, nhận thấy rằng xử lý yêu cầu là hoàn toàn biến mất. Nhưng mã mà tôi đã có trong yêu cầu xử lý vẫn còn đó. Tôi vẫn còn có res.writeHead này và tôi vẫn còn có res.end này. Và điều này là một ví dụ trong JavaScript là ý tưởng về một chức năng ẩn danh. và vô danh giống như một tên phù hợp cho nó vì nó theo nghĩa đen không có một cái tên. Không có yêu cầu chức năng xử lý trong đó. Không có tên, nhưng nó vẫn là tham gia một cuộc tranh cãi. Vì vậy, tôi vẫn có rec và độ phân giải. Và tôi vẫn còn có các mã. Đây là hoàn toàn tốt đẹp Mã JavaScript. Vì vậy, tôi có thể tuyên bố một chức năng mà không cần cho rõ ràng nó một cái tên. Đó là một chút bối rối lúc đầu tiên. Có một số điều hữu ích như mà bạn có thể làm với các chức năng ẩn danh. Không ai có bất kỳ câu hỏi về điều này, hoặc là nó OK chỉ để, bây giờ, loại chỉ chấp nhận rằng nó sẽ làm điều tương tự? Vâng? ĐỐI TƯỢNG: là chức năng đầu tiên lớp trong JavaScript? KEVIN Schmid: Họ là đầu tiên lớp trong JavaScript. Và chỉ biết rằng những khái niệm của đi qua trong một chức năng vô danh như này áp dụng đối với JavaScript mà bạn có thể viết trong dự án cuối cùng của bạn cho trình duyệt web quá. Vì vậy, ví dụ, trong JavaScript trong Trình duyệt của bạn, nó cũng phần nào sự kiện hướng theo ý nghĩa là những gì bạn sẽ thấy có là khi người dùng nhấp chuột này nút, tôi muốn bạn để chạy mã này. Vì vậy, đó là cùng một loại ý tưởng của phía khách hàng khi một click chuột hoặc họ chuột qua một số hình ảnh trên của bạn trang web, chạy mã này. Có thể áp dụng cho các máy chủ. Vì vậy, đó là loại giống như các thú vị lý do tại sao JavaScript là một thực sự phù hợp hoặc một số người nghĩ rằng đó là một ngôn ngữ thích hợp cho các loại hình máy chủ điều khiển sự kiện bởi vì bạn có các chức năng ẩn danh. Bạn có toàn bộ ý tưởng mã không đồng bộ này. OK. Ai có bất cứ câu hỏi? OK. Vì vậy, đó là simple.js. Vì vậy, chúng ta hãy nhìn vào một trong hơn hoặc một vài chi tiết. Vì vậy, đây là sleep.js. Vì vậy, bất cứ ai quen thuộc với chức năng C ngủ? Từ có lẽ một trong những bài giảng trước hoặc một cái gì đó như thế? Vì vậy, về cơ bản bạn có thể vượt qua trong tôi nghĩ rằng một số giây hoặc nếu bạn đang sử dụng U ngủ một số mili giây hoặc nano giây. Và về cơ bản chương trình sẽ chỉ dừng lại chạy cho rằng số lượng thời gian. Phải không? Và sau đó nó sẽ thức dậy cuối cùng và sau đó nó sẽ chỉ tiếp tục chạy chương trình. Vì vậy, máy chủ này loại cung cấp cho ấn tượng của giấc ngủ. Vì vậy, nhận thấy rằng chúng tôi có cùng một res.writeHead 200 với tiêu đề như trước, nhưng sau đó chúng tôi đang gọi điện thoại này chức năng gọi là bộ thời gian chờ. Thiết lập thời gian chờ cũng có sẵn trong trình duyệt web của bạn Google Chrome hoặc Safari hoặc bất cứ điều gì. Và về cơ bản những gì nó làm ở đây là nó dùng trong một hàm. Thông báo, một lần nữa, nó là một chức năng ẩn danh. Vì vậy, đó là loại mát mẻ bởi vì chúng tôi sử dụng một chức năng vô danh trong một chức năng ẩn danh mà có thể là một chút lạ. Nhưng nó dùng chức năng đó, mà là về cơ bản nói đến - và cách này công trình là 5.000 mili giây, tôi muốn bạn thực hiện chức năng đó mà chỉ kết thúc các phản ứng và viết hey. Vì vậy, đây cho ấn tượng giống như ngủ, nhưng cách này thực sự hoạt động là chúng tôi sẽ chạy qua dòng này rất nhanh chóng. Chúng ta chỉ cần viết một cái gì đó. Và sau đó chúng tôi cũng sẽ chạy qua dòng này rất nhanh chóng. Vì vậy, chúng tôi không thực sự đi đợi năm giây. Chúng ta chỉ cần đi để chạy mã này ngay lập tức. Và sau đó có, một lần nữa, điều này ít vòng lặp sự kiện mà bây giờ có điều này đăng ký mà về cơ bản chỉ là liên tục đi xung quanh trong một vòng tròn và nhìn vào đồng hồ trong một đơn Chủ đề và câu nói, có năm giây thông qua chưa? Và sau đó khi nó thấy rằng thứ hai tay đã di chuyển như năm giây hoặc bất cứ điều gì, sau đó nó tỉnh dậy và nói: oh, những gì tôi phải làm gì? Oh tôi phải chạy mã này. Và sau đó nó sẽ chạy res.end hey. Vì vậy, một lần nữa, chúng ta sẽ không bao giờ chờ đợi ở đây. Vì vậy, nó không phải là mã này bên trong chức năng này sẽ mất năm giây để chạy. Mã này sẽ chạy khá nhiều ngay lập tức, ít nhất là so với năm giây mà chúng tôi đã nói chuyện về sớm trước. Vì vậy, chỉ để thấy điều này trong hành động, Tôi có thể làm Node.sleep.js. Và đã làm tôi rối lên một cái gì đó? Có thể. Xin lôi. Hãy xem những gì chúng tôi có thể làm để sửa lỗi này. OK. Vì vậy, chắc chắn sử dụng Node.js. Tôi chỉ đùa thôi. OK. Chỉ cần một giây. OK. Tôi biết nó là gì. Vì vậy, vấn đề là trong tab khác của tôi ở đây, tôi đã chạy Node đã có trên cùng địa chỉ, 1337. Vì vậy, các lỗi này ném, nếu chúng ta nhìn nó thực sự chặt chẽ, là địa chỉ trong sử dụng, EADDRINUSE. Vì vậy, tôi đã được sử dụng ở đây năm 1337. Vì vậy, nếu tôi đóng cửa này ra, và sau đó tôi bây giờ cố gắng chạy này, hy vọng, tất cả mọi thứ sẽ tốt đẹp. OK. Vì vậy, bạn chỉ có thể có một điều loại lắng nghe trên một cổng cùng một lúc. Một giải pháp khác sẽ được cho tôi chỉ cần chỉnh sửa chương trình và thực hiện nó giống như một cái gì đó hoặc 1338 như thế. Nhưng bây giờ giấc ngủ đang chạy. Vì vậy, chúng ta hãy thực sự cố gắng nó ra trong trình duyệt thời gian này bởi vì đó là một ít không đúng lắm để xem nó trong một thiết bị đầu cuối. Vì vậy, tôi chỉ cần đi để đi đến đó 127 địa chỉ một lần nữa tại 1337. Và nếu bạn có thể nhìn thấy nó - Tôi không biết nếu bạn có thể - nhưng tôi trình duyệt của tham gia một rất, rất dài thời gian để tải hoặc như năm giây. Và sau đó sau đó, nó cuối cùng kết thúc phản ứng. Và bạn không thể nhìn thấy nó bởi vì điều được di chuyển hơn một chút, nhưng nếu tôi làm này nhỏ hơn một chút, bạn có thể thấy nó nói hey. Vì vậy, tôi có hey, nhưng sau năm giây. Và nó có thể là một chút sạch hơn để xem nó ở đây trên các thiết bị đầu cuối, vì vậy tôi sẽ làm một - chúng ta hãy làm ở đây - chúng ta hãy làm Curl địa chỉ một lần nữa với năm 1337. Và tôi chỉ cần loại phải ngồi ở đây trong năm giây. Nhưng nhận thấy rằng các máy chủ có thể chấp nhận câu trả lời mới. Vì vậy, nó in hey. Và để giới thiệu này, về cơ bản những gì Tôi có thể làm trong tab khác này - vì vậy hãy nói rằng tôi làm điều này trong một tab khác, Tôi sẽ làm Curl và cùng điều một lần nữa. Và tôi sẽ cố gắng để đá những kẻ ra cùng một lúc. Vì vậy, tôi sẽ làm điều này, và tôi sẽ chạy đua trên đây và tôi sẽ làm điều đó một lần nữa. Và chúng ta hãy làm cho nó để bạn có thể thấy cả hai. Đó là một trong in hey và một trong đó in hey tất cả các con đường ở - chúng ta hãy làm thí nghiệm đó một lần nữa. Trên thực tế, chúng ta hãy sử dụng này lừa, nếu đó là OK. Vì vậy, tôi sẽ sử dụng một điều vỏ cho phép tôi về cơ bản chạy hai bản sao của chương trình này song song. Vì vậy, nó sẽ chạy chương trình đầu tiên và chương trình thứ hai song song. Vì vậy, bây giờ nếu tôi nhấn Enter, nó sẽ để thực hiện yêu cầu đó khá nhiều ngay lập tức cùng một lúc. Vì vậy, hãy cho một shot. Vì vậy, bây giờ thấy nó nói hai quá trình. Và nếu bạn tò mò, mà 27.000 số về cơ bản là quá trình ID. Và sau đó thông báo, họ in hey cùng một lúc. Nó không giống như chúng tôi đã phải chờ năm giây cho một và sau đó sau đó, năm giây sau đó có lần thứ hai. Vì vậy, đó là loại, trong một số cách, nó không thực sự chứng minh, nhưng nó bằng chứng trực quan mà nó không chỉ là như chờ đợi năm giây và ngăn chặn toàn bộ chủ đề. OK mát mẻ. Vì vậy, Aaron hỏi một câu hỏi trước đó là, tốt những gì nếu chúng ta làm điều gì đó - Vâng? ĐỐI TƯỢNG: Chờ. Làm thế nào là khác nhau từ printf đệm, mặc dù? Không nó sẽ tự động làm điều đó? Tại sao chúng ta phải lo lắng về nó? Kevin Schmid: Oh, có thể bạn nói rằng một lần nữa? ĐỐI TƯỢNG: Không thích printf đệm làm điều chính xác giống nhau không? KEVIN Schmid: Các bộ đệm printf? ĐỐI TƯỢNG: Vâng. OK. Không phải trong một trong những câu đố họ nói về làm thế nào nếu bạn phải printf một cái gì đó và sau đó có nó tạm dừng một thứ hai, và sau đó bạn có nó vòng mười Đôi khi, nó sẽ đợi mười giây và sau đó printf tất cả mọi thứ lại với nhau? KEVIN Schmid: Oh, OK. ĐỐI TƯỢNG: Có làm như vậy điều đó trong trường hợp này? KEVIN Schmid: Vậy câu hỏi là về cơ bản là một trong những câu đố cũ hoặc một cái gì đó, có một câu hỏi mà về cơ bản nếu bạn nói in f 10 mọi thứ ở một thời gian và sau đó ngủ như trong quá trình in ấn những người ra, vào cuối vì lý do nào, nó sẽ chỉ đổ tất cả những người ra trên màn hình. Do đó, có hai loại khác nhau khái niệm ở đây. Vì vậy, tôi đoán có một điều rằng, trong này trường hợp, chúng tôi đang làm việc với hai khác nhau loại người hỏi máy chủ cho những thứ cùng một lúc. Và lý do mà các loại printf của chờ đợi như thế và bãi tất cả ra ngoài cùng một lúc là có liên quan nhiều hơn đến cách printf loại - do đó, cách printf thực sự thực hiện là nó về cơ bản đã nói chuyện với các hệ điều hành để viết những công cụ để giao diện điều khiển. Vì vậy, nó không muốn làm tất cả điều đó thứ ngay lập tức khi bạn nói printf một số chuỗi bởi vì đó có thể có tốn kém nếu nó phải làm điều đó mỗi lần. Vì vậy, nếu bạn làm printf hey, chương trình của bạn có thể không thực sự in mà ngay lập tức để giao diện điều khiển. Nó có thể nói, OK, tôi đã viết nó. Và sau đó loại chờ đợi cho bạn để cung cấp cho nó nhiều hơn một chút trước khi thực sự viết nó ra để giao diện điều khiển. Vì vậy, lý do mà đó là trường hợp - và đó là loại không liên quan đến giấc ngủ - là giấc ngủ là loại chỉ tiêm ở đó để chứng minh thực tế là nó không viết nó đồng bộ. Nhưng lý do cho điều đó chỉ là hiệu suất để bạn không cần phải làm cho nhiều địa chỉ liên lạc để hệ điều hành. Nhưng ở đây, những gì chúng tôi đang thực sự cố gắng để làm với điều ngủ đây chỉ là chương trình khi chúng tôi có hai người ghé thăm trang web này, nó sẽ không đưa chúng trong một đường, nơi nó sẽ nói Tôi có để giúp bạn, và sau đó khi tôi hoàn toàn hoàn thành giúp bạn sau này năm giây, sau đó tôi sẽ chuyển sang người kế tiếp. Vì vậy, yêu cầu người đầu tiên của không tie lên rằng vòng lặp sự kiện nếu có ý nghĩa. Nhưng đây thực sự là một ví dụ của cái gì đó sẽ buộc các vòng lặp sự kiện. Vì vậy, đây là một chức năng khủng khiếp để tính toán mức Fibonacci thứ n. Đó là nghĩa đen cách tồi tệ hơn bạn có thể tính số Fibonacci thứ n. Và điều này thực sự chỉ để thừa nhận này đến từ đâu, nơi có thực sự - Ý tôi là, bạn có thể cố gắng đi tìm nó - nhưng có như một blog rất dài đăng bài mà ai đó đã viết. Nó giống như một trong những điều Reddit. Nhưng ai đó chỉ trích Node.js, và họ đã sử dụng điều này như là một ví dụ. Vì vậy, tôi loại muốn chỉ cho bạn thấy hai quan điểm khác nhau chỉ để có được một sự hiểu biết chung về các khái niệm sau hai điều này. Nhưng điều này được chọn là chỉ là một khủng khiếp, tính toán khủng khiếp không hiệu quả cách chuyên sâu để tính toán số Fibonacci thứ n. Vì vậy, cũng giống như một mặt lưu ý, tại sao nó khủng khiếp như trong một cách nào? Vâng? ĐỐI TƯỢNG: Giả sử bạn bắt đầu với 1.000. 1000 chia tách thành 999 và 998. Mỗi này chia tách thành hai điều. Mỗi này chia tách thành hai điều. KEVIN Schmid: Đúng vậy. ĐỐI TƯỢNG: Tất cả các con đường xuống. KEVIN Schmid: Chính xác. Vì vậy chỉ cần lặp lại cho máy ảnh, nếu tôi gọi fib trên như 1.000 hoặc một cái gì đó như thế, rõ ràng là không ít hơn hoặc bằng một vì vậy tôi sẽ đi đến khác trường hợp này, và sau đó tôi sẽ gọi fib 999 cộng với fib 998. Và sau đó khá nhiều tất cả điều đó công việc mà fib 999 không là loại ở cấp độ này. Nếu bạn đi xuống, nó thậm chí còn dư thừa hơn hơn thế, nhưng nếu bạn chỉ nghĩ tính toán fib 998 được chúng tôi khá gần với fib 999. Vì vậy, chúng tôi thực sự cần được nhiều hơn một chút thông minh về cách chúng tôi loại tái sử dụng này, nhưng chúng tôi không tái sử dụng những điều này ở tất cả. Vì vậy, bạn có thể tưởng tượng khổng lồ này, cây khổng lồ đó chỉ là khủng khiếp. Nhưng dù sao, OK. Vì vậy, đó là lời nói dối. Nó chỉ mất một thời gian để chạy. Vâng? ĐỐI TƯỢNG: [nghe được]. KEVIN Schmid: Oh, có thể bạn nhắc lại câu hỏi? ĐỐI TƯỢNG: [nghe được]. KEVIN Schmid: Oh vì vậy đây là chỉ cần mã đó sẽ là loại trên phía máy chủ. Vì vậy, đây sẽ không được tìm thấy trong trình duyệt hoặc bất cứ điều gì. Đó là cơ bản những gì chúng tôi có là khi người sử dụng ở đây khá nhiều làm cho yêu cầu của họ một lần nữa, khi chúng ta loại tạo một yêu cầu, chúng tôi sẽ gọi chức năng này ở phía máy chủ. Và sau đó chúng tôi sẽ có được kết quả trở lại từ gọi là chức năng. Và sau đó chúng tôi sẽ chỉ cần in nó cho người dùng. Vì vậy, người dùng không thực sự giải quyết với chức năng này quá nhiều. Là câu hỏi? Điều đó có ý nghĩa? OK. Mát mẻ. Vì vậy, một lần nữa, chúng tôi làm toàn bộ res.writeHead này điều mà chúng tôi in ra tiêu đề. Và sau đó tôi sẽ phản ứng bằng cách làm con số kỳ diệu là fib 45. Vì vậy, chúng ta hãy chỉ chạy máy chủ này. Vì vậy, tôi sẽ làm một fib.js. Node Vì vậy bây giờ máy chủ fib của tôi đang chạy. Và sau đó ở đây, tôi sẽ để làm một trong những. OK? Vì vậy, tôi chỉ muốn nói, Curl. Vì vậy, nó sẽ mất một thời gian ngắn nhưng hy vọng nó sẽ sớm kết thúc và nó sẽ in ra 45 mà Fibonacci số. ĐỐI TƯỢNG: [nghe được]. KEVIN Schmid: Nó sẽ được thực hiện khá sớm. Vì vậy, nó phải mất 5-6 giây. Tôi không biết đó chỉ là động cơ V8 siêu nhanh, nhưng trong mọi trường hợp, đây là một ví dụ rất ngắn và cố không thanh nha của một không tầm thường tính toán. Vì vậy, sau một thời gian, nó không có được điều này. Nhưng bây giờ, nếu tôi làm điều đó cùng một loại thí nghiệm như trước khi mà tôi làm hai yêu cầu cùng một lúc? Vì vậy, ở đây tôi sẽ đến một Curl trên địa chỉ đó, và tôi sẽ để làm khác Curl. Và hãy nhớ, khi chúng tôi đã làm điều này cho ngủ máy chủ, khi chúng tôi về cơ bản đã có nó sau năm giây, họ khá nhiều cả hai trở lại ngay khoảng thời gian đó. Vì vậy, nó không được đặc biệt gắn lên. Nhưng chúng ta hãy thử nó ngay bây giờ. OK, vì vậy chúng tôi có hai quá trình của chúng tôi. Nhớ đó là những quá trình ID. Điều này là có được một chút vụng về trong khi chúng tôi đứng. Vì vậy, hãy cứ ở lại và chờ đợi. Vì vậy, một trong số họ nên đến trở lại sau như - OK, vì vậy một trong trở lại. Nhưng sau đó tại sao không phải là thứ hai một trở lại chỉ được nêu ra? Vâng? ĐỐI TƯỢNG: Các máy chủ không thể làm bất cứ điều gì trong khi nó tính toán rằng số lượng lớn. KEVIN Schmid: Đúng vậy. Vì vậy, câu trả lời là chỉ có máy chủ thực sự không thể làm bất cứ điều gì trong khi nó tính toán con số Fibonacci. Vì vậy, bây giờ tôi chỉ có hai thứ tôi trở lại. Nhưng tôi đoán chỉ để suy nghĩ về mã nhiều hơn một chút, làm thế nào nó làm việc và tất cả mọi thứ. Vì vậy, chức năng này ở đây là mã mà Tôi đã nói với máy chủ này để chạy khi nó nhận được yêu cầu mới đến. Vì vậy, nó chỉ sẽ chạy qua này toàn bộ mã, và sau đó nó sẽ đi sao cho vòng lặp sự kiện và sau đó tiếp tục kiểm tra các sự kiện mới. Vì vậy, về cơ bản những gì chúng tôi đã xảy ra là máy chủ là lắng nghe những điều mới. Người đầu tiên yêu cầu 45 là gì. Chúng tôi chạy mã này sẽ được tính toán. Mã này có khoảng năm đến sáu giây để chạy. Sau đó chúng tôi quay trở lại vòng lặp sự kiện và kiểm tra các yêu cầu mới. Vì vậy, đây là một ví dụ như thế nào, nếu bạn có những điều được gọi là tính toán ràng buộc, hoặc sử dụng rất nhiều tính toán, không quyền lực, nhưng như thế là tính toán chuyên sâu - Tôi đoán một điều để nói về việc này là mà chức năng này được làm hoàn toàn, đối với hầu hết các phần, khá hữu ích ngay làm việc. Toàn bộ thời gian gọi lại chức năng được chạy, nó đã được khá nhiều dành phần lớn thời gian của mình chỉ tính toán con số đó thứ n Fibonacci. Nhưng chúng tôi chỉ có một thread để đối phó với. Trong mô hình Apache, khi hai người thực hiện các yêu cầu để có được fib 45, chúng tôi sẽ có hai chủ đề khác nhau. Và sau đó công việc của hệ điều hành đã có, hoặc cấp độ người dùng mã quản lý các chủ đề, sẽ đã được để cắt đó lên trên CPU, hoặc thậm chí nếu bạn có nhiều CPU, phân phối chúng đều trên khắp các CPU để cả hai đều kết thúc khoảng cùng một lúc. Vì vậy, chỉ để cho bạn thấy làm thế nào chúng ta có thể sắp xếp của - và điều này không phải là sự hoàn hảo giải pháp, nhưng loại như thế nào chúng ta có thể làm cho một trở lại đây và làm tốt hơn một chút. Vì vậy, những gì tôi có ở đây một chương trình gọi là Fib C. Và điều này về cơ bản sử dụng một một trong những mô-đun được gọi là Node Quá trình trẻ em Module. Vì vậy, tôi đã bao gồm rằng vào loại hàng đầu giống như tôi sẽ làm một bảng bao gồm process.h trẻ em hoặc một cái gì đó. Bây giờ tôi có quyền truy cập vào biến CP này trong đó có tất cả các chức năng của tôi. Vì vậy, bây giờ những gì tôi đang làm trong phản ứng này xử lý là tôi đang chạy chương trình này dot giảm fib 45. Vì vậy, những gì tôi đã làm - và tôi chỉ cần đi bước ra khỏi chương trình này cho một chút - là tôi đã viết một chương trình C về cơ bản tính toán số Fibonacci thứ n. Vì vậy, đây chỉ là một chương trình tôi đã viết trong C mà tính này. Tôi có thể biên dịch nó, và tôi có thể chạy nó ở dòng lệnh. Và nó sẽ tính toán Số 45 Fibonacci. Vì vậy, nhận thấy nó chỉ mất khá nhiều như lâu dài. Tôi có thể có thể đã sử dụng dấu gạch ngang 03 tối ưu hóa nó hay như thế, nhưng tôi chỉ cần làm như thường xuyên cài đặt trình biên dịch. Và nó in nó ra. Nhưng bây giờ, những gì tôi loại làm gì? Oh xin lỗi, tập tin sai. Vì vậy, tôi làm những thứ tương tự với tiêu đề như trước. Sau đó, tôi làm cp.exec này. Vì vậy, điều này sẽ làm điều đó là của sẽ chạy chương trình này. Tuy nhiên, cách làm việc này là nó sẽ không phải chờ đợi chương trình để kết thúc. Chỉ về cơ bản nó nói thực hiện chương trình này. Vì vậy, về cơ bản loại này vào lệnh loại kịp thời. Và sau đó, khi bạn đang thực hiện với nó, chạy chức năng này. Vì vậy, bây giờ chúng tôi loại được điều này toàn phục hồi điều của như chúng tôi không chờ đợi. Điều đó có loại có ý nghĩa? Vâng? ĐỐI TƯỢNG: [nghe được]? KEVIN Schmid: Vì vậy, đây sẽ thực sự mở ra một quy trình mới để làm điều đó. Vì vậy, đây thực sự là, trong một số cách, ác, không phải là siêu ác, nhưng nó là quan trọng để nói rằng đây là loại sẽ trở lại, một mặt, Apache mô hình mà chúng tôi làm chủ đề và quy trình cho mỗi yêu cầu hoặc quy trình cho mỗi yêu cầu. Vì vậy, đây là loại tương tự những gì Apache không. Trong một số trường hợp, nó sẽ chỉ sử dụng một mới sợi, mà là nhiều hơn một chút ánh sáng trọng lượng hơn một quá trình, nhưng Apache có thể kết thúc forking một quá trình mới đó là loại gì chúng tôi làm ở đây ngầm bằng cách làm dấu chấm dấu gạch chéo fib 45. Và sau đó trong trường hợp đó, chúng tôi loại chịu các chi phí tương tự của các quá trình. Vì vậy, đây chỉ là một điều bạn có thể làm. Nhưng chỉ để hiển thị loại này đang chạy. Và nói chuyện này chỉ là thực sự nhằm mục đích trình bày các loại chương trình như một cách để thể hiện quan điểm khác nhau về làm thế nào để thiết kế các máy chủ như thế. Vì vậy, đây đang chạy, và sau đó nếu như họ làm này một lần nữa, tôi có hai quá trình ID. Chúng ta hãy chỉ nói về điều cần chỉ ra. Vì vậy, nhận thấy rằng họ đang từng bước. Đó là mát mẻ. Bởi vì nó là 27.122 trước. Nhưng thông báo bây giờ, họ đã trở lại tại một khoảng thời gian tương tự. Và bây giờ, một câu hỏi hay để hỏi về tại sao là các trường hợp là, có công việc là ngay bây giờ để loại làm những việc này loại chơi công bằng với nhau khác, hai trường hợp này của dot dấu gạch chéo fib 45 mà tôi chạy hoặc Node chạy? Ai loại làm cho nó công bằng khi họ cả được loại cân thời gian chạy? ĐỐI TƯỢNG: [nghe được]. KEVIN Schmid: Vâng. Vì vậy, về cơ bản, khi tôi làm dấu chấm dấu gạch chéo fib 45 hay như thế, bây giờ nó loại đến hệ điều hành xử lý thời gian chạy của chương trình đó. Và bây giờ nó có thể lên lịch cho chúng trên các CPU khác nhau hoặc nó có thể lên lịch cho chúng. Nó có thể cắt thời gian một trong đó CPU được hay rằng họ nhận được để chạy trên một CPU. Vì vậy, đó là ý tưởng đằng sau đó. Điều đó có ý nghĩa với tất cả mọi người? Vì vậy bây giờ Node là không thực sự chơi một một phần trong phân chia các nhiệm vụ. OK. Vì vậy, đó là gần như nó cho ví dụ. Tôi chỉ muốn thể hiện điều thêm một bởi vì rất nhiều này cho đến nay đã được không hoàn toàn siêu thực tế trong một số trường hợp. Tôi có thể tưởng tượng về nhà sau này nói chuyện và một cái gì đó và nói như thế nào, tôi cũng loại ra khỏi cuộc nói chuyện đó mà Tôi có thể làm cho một máy chủ Fibonacci dự án cuối cùng của tôi. Vì vậy, đây chỉ là loại một ví dụ nữa mà hy vọng sẽ được - có thể không, nhưng có lẽ - nhiều hơn một chút loại có liên quan đến các dự án cuối cùng và suy nghĩ trước cho những việc như thế. Vì vậy, đây là chat.js. Vì vậy, đây là loại giống như một số mẫu mã phía máy chủ mà bạn có thể sử dụng để thiết lập một máy chủ trò chuyện nhỏ như bạn có thể đã nhìn thấy trên Facebook Chat hoặc bất cứ điều gì. Vì vậy, tôi không nói rằng điều này giống như Facebook Trò chuyện, nhưng đây là loại như một tốt - có thể không tốt, nhưng có lẽ tốt - điểm bắt đầu cho một cuộc trò chuyện máy chủ cho website của bạn cho một dự án cuối cùng. Vì vậy, chúng ta hãy nhìn vào những gì nó đang làm. Vì vậy, chúng tôi đang nhận được điều đặc biệt này ở đầu, điều này var SIO bằng yêu cầu Socket.IO. Vì vậy, đây là một điều mà nó không thực sự đi kèm với Nút nhưng bạn có thể cài đặt nó. Đó là một mô-đun Node. Vì vậy, nó chỉ giống như một số mở rộng Node. SocketIO thực sự là thực sự loại mát mẻ. Đây là một khái niệm trừu tượng mà về cơ bản những gì nó là là nó cho phép bạn có dòng này của truyền thông giữa một trang web trình duyệt và máy chủ web. Vì vậy, phần lớn cho đến nay, chúng tôi đã có những rất nhanh một hoặc hai giây thông tin liên lạc thứ hai giữa một trang web trình duyệt và máy chủ web. Vì vậy, nó là cơ bản đi đến google.com, get các công cụ, gửi nó trở lại, và sau đó chúng tôi đang thực hiện. Chúng tôi sẽ không bao giờ nói chuyện một lần nữa cho đến khi sử dụng các loại trong một cái gì đó khác. Nhưng những gì Socket.IO và loại tương tự điều - và SocketIO thực sự là một trong những điều mà được xây dựng trên như WebSocket được sắp xếp của có sẵn như một phần của HTML5 - cho phép bạn có điều này đối thoại tiếp tục. Và điều này là rất hữu ích trong một máy chủ trò chuyện là điều mà vì nó là loại giống như một cuộc đối thoại liên tục trong một số cách bởi vì nếu bạn đang trò chuyện với ai đó, bạn có thể chỉ cần gửi một tin xuống các đường ống, và sau đó là máy chủ có thể gửi tin nhắn xuống đường ống để người khác bạn trò chuyện với. Và sau đó bạn có thể có này trao đổi như thế. Vì vậy, đó là loại gì SocketIO là tốt cho. Lý do mà SocketIO sử dụng WebSockets như một điều là trong Ngoài WebSockets chỉ đơn giản cũ, nó cũng thực hiện một số thủ thuật cơ bản làm cho nó tương thích trình duyệt. Vì vậy, các trình duyệt như Internet Explorer tiếc là không hỗ trợ WebSockets phải ra khỏi hộp. Vì vậy, nó sử dụng một số loại khác mát mẻ gọn gàng việc với Adobe Flash cho phép bạn có hỗ trợ qua trình duyệt. Vì vậy, đó là thực sự hữu ích. Và trên thực tế, tôi biết tôi là loại chạy trên thời gian ở đây, nhưng CS50 Thảo luận, có bao giờ bạn nhìn thấy một cái gì đó như thế, tôi không biết, trống vậy và như vậy là trả lời bài viết này hoặc một cái gì đó như vậy, tính năng này? Đó là SocketIO. Vì vậy, khi ai đó bắt đầu gõ vào thảo luận về hộp để làm cho bài trả lời hoặc một cái gì đó, trình duyệt của bạn là gì gọi SocketIO phát ra một số loại sự kiện nói rằng ai đó là trả lời bài viết này. Sau đó các máy chủ nói, OK, những gì tôi phải làm gì? Vâng bây giờ tôi phải nói với những kẻ khác người đang ở trên CS50 Thảo luận tìm kiếm ở bài này mà ai đó trả lời. Vì vậy, đó là loại gì SocketIO là tốt cho, loại này tiếp tục dòng đối thoại. OK. Vì vậy, những gì tôi có ở đây - và chúng tôi chỉ sẽ bỏ qua các mảng kết nối cho một chút - những gì tôi làm là tôi nghe khác. Vì vậy, đó chỉ là cách Socket.IO được nói chúng ta hãy lắng nghe trên cổng này. Và sau đó tôi làm điều này trên kết nối. Vì vậy, đó chỉ là về cơ bản socket IO cách nói, khi chúng tôi nhận được kết nối, tôi muốn bạn để chạy mã này. Và nhận thấy rằng thay vì có rec và độ phân giải thông qua trong đó tôi có Socket. Và ý tưởng socket này về cơ bản này điều mà bạn có thể viết và đọc từ đó có người sử dụng của thông điệp có thể. Và những thông điệp mà bạn muốn gửi có thể đi qua socket đó. Điều đó có ý nghĩa? Vì vậy, nó là cái gì trường này. Vì vậy, những gì tôi làm tôi gọi là Socket.emit. Và sinh ra các mất khá nhiều hai đối số. Tham số đầu tiên là một chuỗi chỉ đại diện cho các loại điều bạn đang phát. Vì vậy, đối với trường hợp này, tôi đã sử dụng chuỗi tin nhắn mới này. Và đó chỉ là về cơ bản nói rằng loại điều này, những gì tôi gửi, là một thông điệp mới. Vì vậy, bạn có thể nghe với nhiều loại cụ thể như tin nhắn mới hoặc bất cứ điều gì bằng cách sử dụng dấu chấm trên. Vì vậy, kết nối và sử dụng gửi ở đó, nếu bạn nhìn vào nơi mà chúng ta gọi là dấu chấm trên, đó là những chuỗi khác đại diện loại thông điệp người dùng. Vì vậy, nó về cơ bản bạn có thể có sinh ra các này một trong các loại tin nhắn, và sau đó làm một cái gì đó để đáp ứng với một trong những loại tin nhắn Vì vậy, tôi phát ra thông điệp mới này. Chúng ta sẽ bỏ qua connections.push trong một giây. Nhưng sau đó tôi nói, Socket.on người dùng gửi. Vì vậy, bây giờ nó loại thích khi người sử dụng gửi cho tôi một tin nhắn, tôi muốn bạn chạy mã này. Và nhận thấy rằng có chức năng ẩn danh đang trong biến này gọi là dữ liệu đó là cơ bản đi có tin nhắn của người dùng. Loại vì vậy bây giờ chúng ta hãy nói về các mảng kết nối. Vì vậy, đây được thiết kế cho một khách hàng trò chuyện nơi tất cả mọi người về cơ bản là loại trong cùng một phòng chat. Vì vậy, về cơ bản, những gì chúng ta cần phải giữ xung quanh là một số mảng cơ bản đại diện cho tất cả mọi người trò chuyện trong một số cách, nếu có ý nghĩa. Phải không? Bởi vì chúng tôi cần phải biết ai những kẻ là vì vậy chúng tôi có thể gửi các tin nhắn mà người khác gửi cho chúng tôi. Vì vậy, những gì mã này không khi người dùng là gửi một thông điệp - đó là loại sự kiện - chúng ta sẽ chạy mã này. Và những gì chúng tôi làm, chúng tôi chạy qua đây là mảng mà chúng tôi đã được gọi là kết nối. Và khá nhiều cho mỗi kết nối ngoại trừ một trong đó là của chúng ta, đó là những mã này cho biết, chúng tôi gửi một mới tin nhắn với thông điệp đính kèm thông tin. Vì vậy, nếu bạn nhận thấy ở đây, những gì tôi đã làm khi người sử dụng thực sự làm cho một mới kết nối là tôi đã bổ sung thêm các Phương pháp JavaScript.push, đây là về cơ bản chỉ nói như thêm mà cắm như một giá trị vào kết nối của chúng tôi mảng. Vì vậy, bây giờ khi mã này chạy, nó sẽ gửi những điều đặc biệt cho những kết nối. Vì vậy, đây có thể là một điểm khởi đầu tốt để làm một máy chủ trò chuyện hoặc một cái gì đó tương tự. Và các loại điều thú vị là các mã mà bạn nhìn thấy ở đây cho như trên và phát ra và các công cụ như thế là cùng loại mã JavaScript mà bạn sẽ viết trong trình duyệt để tương tác với máy chủ. Vì vậy, đó là lý do tại sao SocketIO là loại gọn gàng và hữu ích trong việc theo cách đó. Oh và chỉ một điều nữa thật nhanh. Có một dự án cuối cùng CS50 năm ngoái về cơ bản thực hiện một cuộc trò chuyện máy chủ trong Node.js. Tôi nghĩ đó là Harvardchats.org nhưng tôi không - OK. Tôi không chắc chắn những gì các URL, nhưng Tôi có thể gửi đó ra sau đó. Nhưng nó loại mát gì bạn có thể làm với Node.js. Vì vậy, tôi hy vọng, nói chung, các bạn có một cảm giác tốt về những gì Node.js rất hữu ích và làm thế nào bạn có thể có thể áp dụng cho dự án cuối cùng của bạn. Tôi sẽ gửi ra một số chi tiết tài nguyên cùng với điều này. Và cảm ơn các bạn đã đến. Cảm ơn bạn. [Vỗ tay]