Grappler เป็นเซิร์ฟเวอร์ที่เรียบง่ายสำหรับการเชื่อมต่อ "ดาวหาง" ที่แสดง API เดียวที่สอดคล้องกันในทุกการขนส่ง ปัจจุบัน Grappler รองรับการขนส่งดังต่อไปนี้ (แต่ละรายการมีรายการเบราว์เซอร์ที่รองรับในปัจจุบัน):
* - การใช้งาน XMLHttpRequest ของเบราว์เซอร์บางตัวมีนิสัยแปลกๆ ที่ไม่คาดคิด (เช่น เว็บเบราว์เซอร์ในตัวสำหรับ Android 1.6)
Grappler ส่งออกวัตถุหลักหนึ่งรายการ: Server
.
lib/common.js ส่งออกอ็อบเจ็กต์ LOG
และ STATE
ซึ่งมีค่าคงที่ที่ใช้เมื่อบันทึกข้อความและตรวจสอบสถานะของไคลเอ็นต์ตามลำดับ
วัตถุ LOG
คือ:
{
INFO: 1,
WARN: 2,
ERROR: 3
}
วัตถุ STATE
คือ:
{
ACCEPTED: 1, // internal use only
TEMP: 2, // internal use only
PROTO_HTTP: 4, // client is HTTP-based
PROTO_WEBSOCKET: 8 // client is WebSocket-based
}
สร้างอินสแตนซ์ใหม่ของเซิร์ฟเวอร์ grappler
options
เป็นวัตถุที่มีค่าเริ่มต้นดังต่อไปนี้:
{
// A callback for receiving "debug" information. It is called with two arguments: message and message level.
// Message level is one of the values in the `LOG` object.
logger: function(msg, msgLevel) {},
// A string or array of strings which denote who is allowed to connect to this grappler Server instance.
// The format of the string is: "hostname:port", "hostname", or an asterisk substituted for either the hostname
// or port, or both, to act as a wildcard.
origins: "*:*",
// An integer value in milliseconds representing the interval in which a ping is sent to an HTTP client for those
// transports that need to do so.
pingInterval: 3000,
// A storage provider used to store client objects. The default is to use 'object', a simple hash. Other available
// storage providers can be found in lib/storage. The value here is the name without the 'storage' prefix and file extension.
storage: 'object'
}
fnHandleNormalHTTP
เป็นการเรียกกลับซึ่งสามารถแทนที่ grappler สำหรับการเชื่อมต่อ HTTP ขาเข้า หากไม่มีการส่งส่วนหัว grappler จะควบคุมการเชื่อมต่อ อาร์กิวเมนต์ที่ระบุให้กับการโทรกลับนี้จะเหมือนกันสำหรับเหตุการณ์ request
ของ http.Server
นั่นคือ: อ็อบเจ็กต์ http.ServerRequest และ http.ServerResponse ควรสังเกตว่าหากคุณต้องการให้ grappler จัดการการเชื่อมต่อ HTTP ขาเข้าทั้งหมดโดยอัตโนมัติ แต่ต้องการระบุการโทรกลับสำหรับ fnAcceptClient
คุณต้องระบุค่า false
สำหรับ fnHandleNormalHTTP
fnAcceptClient
เป็นการเรียกกลับที่ดำเนินการทันทีที่ไคลเอ็นต์เชื่อมต่อ วัตถุประสงค์หลักของการโทรกลับนี้คือเพื่อให้มีโอกาสที่จะปฏิเสธไคลเอ็นต์ในการเข้าถึงเซิร์ฟเวอร์ grappler เพิ่มเติมทันที ตัวอย่างเช่น แอปพลิเคชันของคุณอาจคงบัญชีดำไว้หรืออาจขึ้นบัญชีดำ/ควบคุม IP บางอย่างกลับโดยอัตโนมัติหลังจากเชื่อมต่อ x ในระยะเวลาที่กำหนด หากการโทรกลับนี้ส่งคืน false
การเชื่อมต่อจะถูกตัดโดยอัตโนมัติ มิฉะนั้นการเชื่อมต่อจะได้รับอนุญาต การโทรกลับได้รับหนึ่งอาร์กิวเมนต์ ซึ่งเป็นวัตถุ net.Stream
ที่แสดงถึงการเชื่อมต่อ
function(client) { }
เหตุการณ์นี้จะถูกส่งออกมาทุกครั้งที่ไคลเอนต์ใหม่เชื่อมต่อกับระบบสำเร็จ client
เป็นตัวอย่างของ HttpClient
function(err) { }
ปล่อยออกมาเมื่อเกิดข้อผิดพลาดที่ไม่คาดคิด
เริ่มการรับฟังเซิร์ฟเวอร์บน port
และ host
ที่ระบุ หากละเว้น host
เซิร์ฟเวอร์จะรับฟังที่อยู่ IP ใดๆ
ส่ง data
ไปยังไคลเอนต์ที่เชื่อมต่อทุกตัวโดยใช้ encoding
เสริม
ปิดเซิร์ฟเวอร์โดยไม่รับฟังการเชื่อมต่อขาเข้าอีกต่อไป และตัดการเชื่อมต่อไคลเอนต์ที่มีอยู่
มีวัตถุสำคัญอีกอย่างหนึ่งที่ใช้ใน grappler และนั่นคือวัตถุ HttpClient
HttpClient
แสดงถึงผู้ใช้ที่เชื่อมต่อกับเซิร์ฟเวอร์และสามารถใช้เพื่อโต้ตอบกับผู้ใช้นั้นได้
function() { }
ปล่อยออกมาเมื่อบัฟเฟอร์การเขียนของไคลเอ็นต์ว่างเปล่า
function() { }
ปล่อยออกมาเมื่อไคลเอนต์ยกเลิกการเชื่อมต่อ
ฟิลด์บิตที่มีสถานะปัจจุบันของไคลเอ็นต์ ดูวัตถุ STATE
ที่กล่าวถึงก่อนหน้านี้สำหรับบิตที่ถูกต้อง
ที่อยู่ IP ของลูกค้า
ส่ง data
โดยใช้ encoding
เสริมไปยังไคลเอนต์ ฟังก์ชันนี้จะคืนค่า true
หากล้างข้อมูลทั้งหมดไปยังเคอร์เนลบัฟเฟอร์สำเร็จ มิฉะนั้นจะส่งคืน false
หากข้อมูลทั้งหมดหรือบางส่วนถูกจัดคิวไว้ในหน่วยความจำผู้ใช้ drain
จะถูกปล่อยออกมาเมื่อบัฟเฟอร์เคอร์เนลว่างอีกครั้ง
ส่ง data
ไปยังไคลเอนต์ที่เชื่อมต่ออื่นๆ ทั้งหมดโดยใช้ encoding
เสริม
ตัดการเชื่อมต่อของลูกค้าไปยังเซิร์ฟเวอร์อย่างเข้มแข็ง