אפליקציות Chrome יכולות לפעול כלקוח רשת עבור חיבורי TCP ו-UDP. במסמך הזה מוסבר איך להשתמש TCP ו-UDP לשליחה ולקבלה של נתונים ברשת. למידע נוסף, ראו Sockets ממשקי API של UDP, Sockets TCP ו-Sockets TCP Server.
דרישות לגבי מניפסטים
באפליקציות Chrome שמשתמשות ב-TCP או UDP, יש להוסיף את הערך sockets למניפסט ולציין את כתובת ה-IP כללים להרשאות של נקודות קצה. לדוגמה:
"sockets": {
"udp": {
"send": ["host-pattern1", ...],
"bind": ["host-pattern2", ...],
...
},
"tcp" : {
"connect": ["host-pattern1", ...],
...
},
"tcpServer" : {
"listen": ["host-pattern1", ...],
...
}
}
התחביר של socket 'host-pattern' רשומות לפי הכללים הבאים:
<host-pattern> := <host> | ':' <port> | <host> ':' <port>
<host> := '*' | '*.' <anychar except '/' and '*'>+
<port> := '*' | <port number between 1 and 65535>)
לתיאור מפורט של התחביר, אפשר לעיין בקטע מפתח מניפסט של Sockets.
דוגמאות לרשומות של מניפסט socket:
{ "tcp": { "connect" : "*:23" } }
– התחברות ביציאה 23 של כל המארחים{ "tcp": { "connect" : ["*:23", "*:80"] } }
– התחברות ביציאה 23 או 80 של כל מארחים{ "tcp": { "connect" : "www.example.com:23" } }
– יציאה 23 מתחברת של www.example.com{ "tcp": { "connect" : "" } }
– חיבור כל היציאות של המארחים{ "udp": { "send" : ":99" } }
– שליחת חבילת UDP ליציאה 99 של כל מארח{ "udp": { "bind" : ":8899" } }
– קישור היציאה המקומית 8899 לקבלת מנות UDP{ "tcpServer": { "listen" : ":8080" } }
– האזנה ל-TCP ביציאה המקומית 8080
שימוש ב-TCP
אפליקציות Chrome יכולות ליצור חיבורים לכל שירות שתומך ב-TCP.
מתבצעת התחברות לשקע
לפניכם דוגמה שמראה איך לחבר (sockets.tcp.connect) לשקע:
chrome.sockets.tcp.create({}, function(createInfo) {
chrome.sockets.tcp.connect(createInfo.socketId,
IP, PORT, onConnectedCallback);
});
עליך לשמור על הכינוי של socketId
כדי שתהיה לך אפשרות לקבל ולשלוח נתונים מאוחר יותר
(sockets.tcp.send לשקע הזה.
קבלה ושליחה ל-socket
קבלה מ-(sockets.tcp.onReceive) ושליחה ל-socket משתמשות באובייקטים של ArrayBuffer. שפת תרגום ללמוד על ArrayBuffers, לקרוא את הסקירה הכללית, את מערכים מסוג JavaScript ואת המדריך, איך להמיר את ArrayBuffer ו-String.
chrome.sockets.tcp.send(socketId, arrayBuffer, onSentCallback);
chrome.sockets.tcp.onReceive.addListener(function(info) {
if (info.socketId != socketId)
return;
// info.data is an arrayBuffer.
});
התנתקות משקע
כך מתנתקים (sockets.tcp.disconnect):
chrome.sockets.tcp.disconnect(socketId);
שימוש ב-UDP
אפליקציות Chrome יכולות ליצור חיבורים לכל שירות שתומך ב-UDP.
שליחת הנתונים מתבצעת
בהמשך מוצגת דוגמה שממחישה איך לשלוח נתונים (sockets.udp.send) ברשת באמצעות UDP:
// Create the Socket
chrome.sockets.udp.create({}, function(socketInfo) {
// The socket is created, now we can send some data
var socketId = socketInfo.socketId;
chrome.sockets.udp.send(socketId, arrayBuffer,
'127.0.0.1', 1337, function(sendInfo) {
console.log("sent " + sendInfo.bytesSent);
});
});
מתקבלים נתונים
הדוגמה הזו דומה מאוד לשיטה 'שליחת נתונים' לדוגמה, אבל אנחנו מגדירים גורם שמטפל באירועים מקבל נתונים.
var socketId;
// Handle the "onReceive" event.
var onReceive = function(info) {
if (info.socketId !== socketId)
return;
console.log(info.data);
};
// Create the Socket
chrome.sockets.udp.create({}, function(socketInfo) {
socketId = socketInfo.socketId;
// Setup event handler and bind socket.
chrome.sockets.udp.onReceive.addListener(onReceive);
chrome.sockets.udp.bind(socketId,
"0.0.0.0", 0, function(result) {
if (result < 0) {
console.log("Error binding socket.");
return;
}
chrome.sockets.udp.send(socketId, arrayBuffer,
'127.0.0.1', 1337, function(sendInfo) {
console.log("sent " + sendInfo.bytesSent);
});
});
});
שימוש בשרת TCP
אפליקציות Chrome יכולות לפעול כשרתי TCP באמצעות ממשק ה-API sockets.tcpServer.
יצירת שקע של שרת TCP
יוצרים שקע שרת TCP באמצעות sockets.tcpServer.create.
chrome.sockets.tcpServer.create({}, function(createInfo) {
listenAndAccept(createInfo.socketId);
});
אישור חיבורי לקוחות
הדוגמה הבאה מראה איך לקבל חיבורים (sockets.tcpServer.listen) בשרת TCP socket:
function listenAndAccept(socketId) {
chrome.sockets.tcpServer.listen(socketId,
IP, PORT, function(resultCode) {
onListenCallback(socketId, resultCode)
});
}
צריך לשמור על הכינוי ב-socketId
כדי שתהיה לך אפשרות לאשר חיבורים חדשים מאוחר יותר
(sockets.tcpServer.onAccept) .
var serverSocketId;
function onListenCallback(socketId, resultCode) {
if (resultCode < 0) {
console.log("Error listening:" +
chrome.runtime.lastError.message);
return;
}
serverSocketId = socketId;
chrome.sockets.tcpServer.onAccept.addListener(onAccept)
}
כשנוצר חיבור חדש, onAccept
מופעל עם ה-clientSocketId
של ה-TCP החדש
חיבור כזה. צריך להשתמש במזהה socket של הלקוח עם ה-API sockets.tcp. הבסיס של הגרסה החדשה
החיבור מושהה כברירת מחדל. כדי להתחיל לקבל, צריך לבטל את ההשהיה באמצעות sockets.tcp.setPaused
.
function onAccept(info) {
if (info.socketId != serverSocketId)
return;
// A new TCP connection has been established.
chrome.sockets.tcp.send(info.clientSocketId, data,
function(resultCode) {
console.log("Data sent to new TCP client connection.")
});
// Start receiving data.
chrome.sockets.tcp.onReceive.addListener(function(recvInfo) {
if (recvInfo.socketId != info.clientSocketId)
return;
// recvInfo.data is an arrayBuffer.
});
chrome.sockets.tcp.setPaused(false);
}
הפסקת האישור של חיבורי לקוחות
קוראים ל-sockets.tcp.disconnect במזהה של שקע השרת כדי להפסיק לקבל חיבורים חדשים.
chrome.sockets.tcpServer.onAccept.removeListener(onAccept);
chrome.sockets.tcpServer.disconnect(serverSocketId);