npm 类似 RPM/RHEL 或者Debian/deb.
为了减少对全局的依赖,默认npm将需要的第三方软件包安装在项目的本地目录,类似GCC的sys-root。全局安装除非参数-g指定,并且必须设定系统环境变量 NODE_PATH。
websocket例子 /windows7-64bit /node 6.9
D:\Develop\Cloud\node\ws-nodejs>node -v
v6.9.5
D:\Develop\Cloud\node\websocket-nodejs>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
name: (websocket-nodejs)
version: (1.0.0)
description:
entry point: (client-websocket.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to D:\Develop\Cloud\node\websocket-nodejs\package.json:
{
"name": "websocket-nodejs",
"version": "1.0.0",
"description": "",
"main": "client-websocket.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Is this ok? (yes)
D:\Develop\Cloud\node\websocket-nodejs>
D:\Develop\Cloud\node\websocket-nodejs>dir
Volume in drive D is Data
Volume Serial Number is EE9F-4AE0
Directory of D:\Develop\Cloud\node\websocket-nodejs
03/09/2018 12:57 PM <DIR> .
03/09/2018 12:57 PM <DIR> ..
03/09/2018 11:17 AM 1,048 client-websocket.js
03/09/2018 12:57 PM 223 package.json
03/09/2018 11:32 AM 1,973 websocket-server.js
3 File(s) 3,244 bytes
2 Dir(s) 441,730,134,016 bytes free
D:\Develop\Cloud\node\websocket-nodejs>npm install websocket <<<<<<<<--本地安装websocket
> websocket@1.0.25 install D:\Develop\Cloud\node\websocket-nodejs\node_modules\websocket
> (node-gyp rebuild 2> builderror.log) || (exit 0)
D:\Develop\Cloud\node\websocket-nodejs\node_modules\websocket>if not defined npm_config_node_gyp (node "D:\Develop\Cloud\node\node-v6.9.5-win-x64\node_modules\npm\bin\node-gyp-bin\\..\..\node_
e (node "" rebuild )
websocket-nodejs@1.0.0 D:\Develop\Cloud\node\websocket-nodejs
`-- websocket@1.0.25
+-- debug@2.6.9
| `-- ms@2.0.0
+-- nan@2.9.2
+-- typedarray-to-buffer@3.1.5
| `-- is-typedarray@1.0.0
`-- yaeti@0.0.6
npm WARN websocket-nodejs@1.0.0 No description
npm WARN websocket-nodejs@1.0.0 No repository field.
###########下面的例子websocket程序来自 ######################
https://www.npmjs.com/package/websocket
#######################################################
<<<<<<<<<<<<< Source code server/websocket
'use strict';
var WebSocketServer = require('websocket').server;
var http = require('http');
var server = http.createServer(function(request, response) {
console.log((new Date()) + ' Received request for ' + request.url);
response.writeHead(404);
response.end();
});
server.listen(8080, function() {
console.log((new Date()) + ' Server is listening on port 8080');
});
var wsServer = new WebSocketServer({
httpServer: server,
// You should not use autoAcceptConnections for production
// applications, as it defeats all standard cross-origin protection
// facilities built into the protocol and the browser. You should
// *always* verify the connection's origin and decide whether or not
// to accept it.
autoAcceptConnections: false
});
function originIsAllowed(origin) {
// put logic here to detect whether the specified origin is allowed.
return true;
}
wsServer.on('request', function(request) {
if (!originIsAllowed(request.origin)) {
// Make sure we only accept requests from an allowed origin
request.reject();
console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.');
return;
}
var connection = request.accept('echo-protocol', request.origin);
console.log((new Date()) + ' Connection accepted.');
connection.on('message', function(message) {
if (message.type === 'utf8') {
console.log('Received Message: ' + message.utf8Data);
connection.sendUTF(message.utf8Data);
}
else if (message.type === 'binary') {
console.log('Received Binary Message of ' + message.binaryData.length + ' bytes');
connection.sendBytes(message.binaryData);
}
});
connection.on('close', function(reasonCode, description) {
console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
});
});
D:\Develop\Cloud\node\websocket-nodejs>node websocket-server.js
Fri Mar 09 2018 12:58:44 GMT+0800 (China Standard Time) Server is listening on port 8080
Fri Mar 09 2018 12:59:18 GMT+0800 (China Standard Time) Connection accepted.
<<<<<<<<<<Source code client/websocket
#!/usr/bin/env node
var WebSocketClient = require('websocket').client;
var client = new WebSocketClient();
client.on('connectFailed', function(error) {
console.log('Connect Error: ' + error.toString());
});
client.on('connect', function(connection) {
console.log('WebSocket Client Connected');
connection.on('error', function(error) {
console.log("Connection Error: " + error.toString());
});
connection.on('close', function() {
console.log('echo-protocol Connection Closed');
});
connection.on('message', function(message) {
if (message.type === 'utf8') {
console.log("Received: '" + message.utf8Data + "'");
}
});
function sendNumber() {
if (connection.connected) {
var number = Math.round(Math.random() * 0xFFFFFF);
connection.sendUTF(number.toString());
setTimeout(sendNumber, 1000);
}
}
sendNumber();
});
client.connect('ws://localhost:8080/', 'echo-protocol');
<<<<<<<<<<<<<<<<< Start client >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
D:\Develop\Cloud\node\websocket-nodejs>node client-websocket.js
WebSocket Client Connected
Received: '2293934'
Received: '6439691'
Received: '4025963'
Received: '4213112'
Received: '13728741'
Received: '8995909'
Received: '9100122'
Received: '9200856'
Received: '4214896'
^C
D:\Develop\Cloud\node\websocket-nodejs>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
On server side
Received Message: 2293934
Received Message: 6439691
Received Message: 4025963
Received Message: 4213112
Received Message: 13728741
Received Message: 8995909
Received Message: 9100122
Received Message: 9200856
Received Message: 4214896
Fri Mar 09 2018 12:59:27 GMT+0800 (China Standard Time) Peer ::ffff:127.0.0.1 disconnected.