Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS、WebSockets(ws)和Openshift_Javascript_Node.js_Websocket_Openshift - Fatal编程技术网

Javascript NodeJS、WebSockets(ws)和Openshift

Javascript NodeJS、WebSockets(ws)和Openshift,javascript,node.js,websocket,openshift,Javascript,Node.js,Websocket,Openshift,我正在尝试使用NodeJS、WS和Openshift创建一个简单的websocket应用程序 这是我的代码: package.json: { "name": "OpenShift-Sample-App", "version": "1.0.0", "description": "OpenShift Sample Application", "keywords": [ "OpenShift", "Node.js", "application", "op

我正在尝试使用NodeJS、WS和Openshift创建一个简单的websocket应用程序

这是我的代码: package.json:

{
  "name": "OpenShift-Sample-App",
  "version": "1.0.0",
  "description": "OpenShift Sample Application",
  "keywords": [
    "OpenShift",
    "Node.js",
    "application",
    "openshift"
  ],
  "author": {
    "name": "John Smith",
    "email": "example123@example.com",
    "url": "http://www.google.com"
  },
  "homepage": "http://www.openshift.com/",
  "repository": {
    "type": "git",
    "url": "https://github.com/openshift/origin-server"
  },

  "engines": {
    "node": ">= 0.6.0",
    "npm": ">= 1.0.0"
  },

  "dependencies": {
    "express": "^4.12.3",
    "socket.io" : "0.9.16",
    "ws" : "0.4.31"
  },

  "devDependencies": {},
  "bundleDependencies": [],

  "private": true,
  "main": "server.js"
}
app.js:

#!/bin/env node
//  OpenShift sample Node application
var express = require('express');
var fs = require('fs');
var WebSocketServer = require('ws').Server;
var SampleApp = function () {

    //  Scope.
    var self = this;

    var url = '127.0.0.1:27017/' + process.env.OPENSHIFT_APP_NAME;

    self.setupVariables = function () {
        //  Set the environment variables we need.
        self.ipaddress = process.env.OPENSHIFT_NODEJS_IP;
        self.port = process.env.OPENSHIFT_NODEJS_PORT || 8080;

        if (typeof self.ipaddress === "undefined") {
            //  Log errors on OpenShift but continue w/ 127.0.0.1 - this
            //  allows us to run/test the app locally.
            console.warn('No OPENSHIFT_NODEJS_IP var, using 127.0.0.1');
            self.ipaddress = "127.0.0.1";
        }
        ;
    };

    self.populateCache = function () {
        if (typeof self.zcache === "undefined") {
            self.zcache = {'index.html': ''};
        }

        //  Local cache for static content.
        self.zcache['index.html'] = fs.readFileSync('./index.html');
    };



    self.cache_get = function (key) {
        return self.zcache[key];
    };


    self.terminator = function (sig) {
        if (typeof sig === "string") {
            console.log('%s: Received %s - terminating sample app ...',
                Date(Date.now()), sig);
            process.exit(1);
        }
        console.log('%s: Node server stopped.', Date(Date.now()));
    };


    self.setupTerminationHandlers = function () {
        //  Process on exit and signals.
        process.on('exit', function () {
            self.terminator();
        });

        // Removed 'SIGPIPE' from the list - bugz 852598.
        ['SIGHUP', 'SIGINT', 'SIGQUIT', 'SIGILL', 'SIGTRAP', 'SIGABRT',
            'SIGBUS', 'SIGFPE', 'SIGUSR1', 'SIGSEGV', 'SIGUSR2', 'SIGTERM'
        ].forEach(function (element, index, array) {
                process.on(element, function () {
                    self.terminator(element);
                });
            });
    };


    self.createGetRoutes = function () {
        self.getRoutes = {};

        self.getRoutes['/'] = function (req, res) {
            res.setHeader('Content-Type', 'text/html');
            res.send(self.cache_get('index.html'));
        };
    };


    self.initializeServer = function () {
        self.createGetRoutes();

        self.app = express();
        //  Add handlers for the app (from the routes).
        for (var r in self.getRoutes) {
            self.app.get(r, self.getRoutes[r]);
        }

    }

    self.initialize = function () {
        self.setupVariables();
        self.populateCache();
        self.setupTerminationHandlers();

        // Create the express server and routes.
        self.initializeServer();
    };



    self.start = function () {

        var wss = new WebSocketServer({ server: self.app
        })

        wss.on('connection', function connection(ws) {
            console.log(".....Connected");
            var location = url.parse(ws.upgradeReq.url, true);

            ws.on('message', function incoming(message) {
                console.log('received: %s', message);
            });

            ws.send('something');
        });

        self.app.listen(self.port, self.ipaddress, function () {
            console.log('%s: Node server started on %s:%d ...',
                Date(Date.now()), self.ipaddress, self.port);
        });
    };

};
var zapp = new SampleApp();
zapp.initialize();
zapp.start();
当我跑步时: wscat——连接ws://something.rhcloud.com:8000

我得到:

connected (press CTRL+C to quit)
disconnected
源代码中有什么错误

感谢(预docker)OpenShift中的,您的应用程序通过监听
process.env.OpenShift\u NODEJS\u端口连接到系统负载平衡器

OpenShift的负载平衡器然后在四个不同的端口上对外公开您的应用程序:

  • 80
    -提供基本http连接
  • 443
    -提供基本的https连接
  • 8080
    -http和ws连接可用
  • 8443
    -提供https和ws连接
  • 不幸的是,在OpenShift的预docker版本中,ws-connection升级(从http或https)只能在端口
    8080
    8443
    上正常工作

    您可以通过包含客户端检查来解决此问题,以测试服务器主机名是否包含字符串“rhcloud.com”。如果需要,则需要使用备用端口号建立客户端的套接字连接

    更新的、基于docker的OpenShift版本包括对标准web端口的完整websocket支持