想了解如何使Apache和Node.js与Socket.io安装程序工作?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于apachenodejs的相关问题,此外,我们还将为您介绍关于Apa
想了解如何使Apache和Node.js与Socket.io安装程序工作?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于apache nodejs的相关问题,此外,我们还将为您介绍关于Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发、apache – NGINX配置与Socket.IO一起使用、Apache和Nodejs跨域ajax问题、Heroku Node.js应用程序上的Socket.io和多个Dyno WebSocket在连接建立之前关闭的新知识。
本文目录一览:- 如何使Apache和Node.js与Socket.io安装程序工作?(apache nodejs)
- Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发
- apache – NGINX配置与Socket.IO一起使用
- Apache和Nodejs跨域ajax问题
- Heroku Node.js应用程序上的Socket.io和多个Dyno WebSocket在连接建立之前关闭
如何使Apache和Node.js与Socket.io安装程序工作?(apache nodejs)
从Node.js / Socket.io开始。 最终,我想用Apache服务页面,同时用Node.js服务器推送和增加一些内容。 这只是一个小testing,看看它是如何工作的。 这是我的设置:
运行在端口8080上的Apache
运行在端口8000上的Node.js
我将 index.html页面(见下文) 复制到它们各自的根目录。
当我打开http://localhost:8000一切正常,我可以看到完整的消息交换。
当我打开http://localhost:8080一切似乎都起作用(基于请求和响应头,而Node.js日志与1比较),但在Node.js或Firebug日志中我看不到任何消息交换 。
Apache 2.4 + PHP-FPM和授权标头
Apache相同的请求阻止
在apache + mod_wsgi下运行subprocess.Popen总是返回错误,返回码为-6
每次更改我的Rails代码时,我都必须重新启动Apache
如何删除macosx上的自动启动apache
当我第一次打开由Node.js服务的页面时,closures它,然后打开由Apache服务的页面。 我可以在Node.jsterminal中看到“CONNECTED”,“disCONNECTED”,然后是“CONNECTED”消息。
问题是:如何使案例2工作?
页:
<script src="http://localhost:8000/socket.io/socket.io.js"></script> <script> var socket = io.connect(''http://localhost:8000''); socket.on(''server calling'',function(data) { console.log(data); socket.emit(''client response'',{my : ''data''}); }); socket.emit(''client calling'',{foo : ''bar''}); </script> Hello!
服务器:
var app = require(''http'').createServer(handler); var io = require(''socket.io'').listen(app); var fs = require(''fs''); app.listen(8000); function handler(req,res) { path = req.url == "/" ? "./index.html" : "." + req.url; fs.readFile(path,function(err,data) { if(err) { res.writeHead(500); return res.end(''Error loading page.''); } res.writeHead(200); res.end(data); } ); io.sockets.on(''connection'',function (socket) { console.log(''CONNECTED''); setInterval(function() { socket.emit(''server calling'',{ hello: ''world'' }); },2000); socket.on(''client response'',function(data) { console.log(data); }); socket.on(''disconnect'',function() { console.log(''disCONNECTED''); }); socket.on(''client calling'',function(data) { console.log(data); }); }); };
我知道关于SO的以下问题:
Node.js + Socket.io + Apache
node.js和apache在不同的服务器上
但我仍然无法完成工作
我试过了:
“将path更改为/socket.io-client/dist/socket.io.js”
在浏览器中: ReferenceError:io没有定义 。 当我去http://localhost:8000/socket.io-client/dist/socket.io.js我得到欢迎来到socket.io。 响应。
在服务器日志中: info – 未处理的socket.io url
“从Apache静态服务器提供socket.io.js”
这将如何工作? Apache不知道如何处理/socket.io/socket.io.js和node_modules ?
dark_rubybuild议设置一个代理
我将Apache根目录的index.html页面中的脚本源更改为:
<script src="http://localhost:8080/socket.io/"></script>
在Apacheconfiguration中,我添加了:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so ProxyPass /socket.io/ http://localhost:8000/socket.io/socket.io.js
用这样的configuration打开http://localhost:8080的结果与上面的2相同:
$ node node-server.js info - socket.io started debug - served static content /socket.io.js debug - client authorized info - handshake authorized U9xPRw_0rRpsv-K9qVkS debug - setting request GET /socket.io/1/websocket/U9xPRw_0rRpsv-K9qVkS debug - set heartbeat interval for client U9xPRw_0rRpsv-K9qVkS debug - client authorized for debug - websocket writing 1:: debug - emitting heartbeat for client U9xPRw_0rRpsv-K9qVkS debug - websocket writing 2:: debug - set heartbeat timeout for client U9xPRw_0rRpsv-K9qVkS debug - got heartbeat packet debug - cleared heartbeat timeout for client U9xPRw_0rRpsv-K9qVkS debug - set heartbeat interval for client U9xPRw_0rRpsv-K9qVkS ... info - transport end (undefined) debug - set close timeout for client U9xPRw_0rRpsv-K9qVkS debug - cleared close timeout for client U9xPRw_0rRpsv-K9qVkS debug - cleared heartbeat interval for client U9xPRw_0rRpsv-K9qVkS debug - discarding transport
即没有消息。
如何正确configurationApache的反向代理,用于跨域AJAX?
如何更改sqlite创buildetilqs文件的临时文件夹?
当magic_quotes_gpc打开Apache Xampp关机时
htaccessredirect删除index.PHP
.htaccess通过虚拟主机的基本身份validation?
你的io.sockets位于处理函数内部。 我假设它将被调用,当你向节点的JS服务器的请求。 直到那时,节点JS服务器从不执行你的IO代码。
尝试将其移出处理程序并将其添加到您的app.js.
而且不需要更改路径或代理。 你最初发布的代码很好。 问题不在于加载socket.io.js文件。 但节点服务器检测io事件。
总结
以上是小编为你收集整理的如何使Apache和Node.js与Socket.io安装程序工作?全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发
我一直在这个问题上花费数小时,但无济于事。
编辑:find解决scheme(请参阅我的答案)
项目背景
我正在Symfony2构build一个项目,这个项目需要一个上传大文件的模块。 我select了Node.js和Socket.IO (我必须从头学习,所以我可能会缺less一些基本的东西)。 我将它们与HTML5 File和FileReader API结合起来,将切片中的文件从客户端发送到服务器。 初步testing表明,这种方法作为一个独立的应用程序运行良好,一切都由Node.js处理和服务,但与Apache和Symfony2集成似乎有问题。
该应用程序有一个不安全和安全的部分。 我的目标是在端口80和443上使用Apache来为Symfony2构build的应用程序提供大量服务,在端口8080上使用带有Socket.io Node.js来上传文件。 连接到套接字的客户端页面将由Apache ,但套接字将通过Node.js运行。 上传模块必须通过HTTPS运行,因为页面驻留在具有经过身份validation的用户的安全环境中。
问题是事件使用socket.emit或socket.send似乎没有工作。 客户端到服务器,或服务器到客户端,它没有任何区别。 没有任何反应 ,也没有错误。
使用Apache POI的sxssfSheet从xlsx读取数据
该网站负载很重+ ROR
JSON对象的最大大小?
PHP如何与Apache接口?
Apache的子域名代理jenkins在tomcat插入额外的目录
代码
显示的代码是我的代码的简化版本,没有混乱和敏感的数据。
服务器
var httpsModule = require('https'),fs = require('fs'),io = require('socket.io'); var httpsOptions = { key: fs.readFileSync('path/to/key'),cert: fs.readFileSync('/path/to/cert'),passphrase: "1234lol" } var httpsServer = httpsModule.createServer(httpsOptions); var ioServer = io.listen(httpsServer); httpsServer.listen(8080); ioServer.sockets.on('connection',function(socket) { // This event gets bound,but never fires socket.on('NewFile',function(data) { // To make sure something is happening console.log(data); // Process the new file... }); // Oddly,this one does fire socket.on('disconnect',function() { console.log("disconnected"); }); });
客户
// This is a Twig template,so I'll give an excerpt {% block javascripts %} {{ parent() }} <script type="text/javascript" src="https://my.server:8080/socket.io/socket.io.js"></script> <script type="text/javascript"> var socket = io.connect("my.server:8080",{ secure: true,port: 8080 }); // Imagine this is the function initiating the file upload // File is an object containing Metadata about the file like,filename,size,etc. function uploadNewFile(file) { socket.emit("NewFile",item); } </script> {% endblock %}
所以问题是…
当然,还有更多的应用程序比这个,但这是我卡住的地方。 页面加载完美没有错误,但排放事件永远不会触发或到达服务器(断开事件除外)。 我已经尝试了客户端和服务器上的消息事件,以检查是否只有自定义事件的问题,但也没有工作。 我猜测什么是阻止客户端 – 服务器通信(这不是防火墙,我已经检查)。
我完全不知所措,请帮忙。
编辑:find解决scheme(请参阅我的答案)
通过一个脚本在apache下所有的path服务
Apache SetEnv预装了REDIRECT_。 是什么赋予了?
Linux未find包含非ASCII字符的文件名的错误
PHP直接打印到打印机(本地/networking)(卡在打印后台处理程序中)
NodeJS应该是独立的(没有Apache Nginx的IE)
经过一番苦心的调试,我发现我的设置有问题。 不妨分享我的发现,虽然他们(我认为)与Node.js,Socket.IO或Apache无关。
正如我所提到的,我的问题已经简化了代码,向您展示我的设置没有混乱。 不过,我通过一个对象来设置客户端,使用属性来配置套接字连接。 像这样:
var MyProject = {}; MyProject.Uploader = { location: 'my.server:8080',socket: io.connect(location,port: 8080,query: "token=blabla" }),// ...lots of extra properties and methods }
问题在于使用location作为属性名称。 这是Javascript中的一个保留字,在这种情况下会造成一些奇怪的行为。 我发现奇怪的是,一个对象的属性名称不能是保留字,所以我决定测试。 我也注意到我正在引用属性不正确,我忘记连接到套接字时使用this.location 。 所以我把它改成了这个,只是作为一个测试。
var MyProject = {}; MyProject.Uploader = { location: 'my.server:8080',socket: io.connect(this.location,// ...lots of extra properties and methods }
但无济于事。 我仍然没有通过套接字获取数据。 所以下一步似乎是合乎逻辑的,这是我受挫的调试风暴。 改变属性名称固定一切!
var MyProject = {}; MyProject.Uploader = { socketLocation: 'my.server:8080',socket: io.connect(this.socketLocation,// ...lots of extra properties and methods }
这种方法完美运行,我得到了大量的调试消息。 成功!! 不管是Javascript中的预期行为,还是重写(或者这里发生的任何事情,“滥用”,现在都觉得是一种更好的方式)对象属性,如果你碰巧使用了保留字,我不知道。 我只知道我从现在开始避开他们!
希望它能帮助那里的任何人!
apache – NGINX配置与Socket.IO一起使用
所以我一直试图让这个工作2天,我被卡住了.这是我第一次为使用NodeJS Socket IO的rails配置服务器.我是Nginx和Unicorn的菜鸟.基本上我的应用程序的NodeJS SocketIO部分会将消息推送给连接到我的应用程序的用户.这是我的Nginx.conf
server{
listen 80 default;
root /home/deployer/saigon/public;
try_files $uri/index.html $uri @unicorn;
location /sockets {
proxy_pass http://localhost:3210;
}
location @unicorn {
proxy_pass http://localhost:3000;
}
}
在我的production.rb中,我已经配置了用户必须从中发送消息到/接收消息的URL
SOCKET_IO_URL ='http://localhost:8080/sockets
为何选择8080?我使用Vagrant转发8080 – > 80
我尝试访问http://localhost:8080/sockets,我能够获得套接字欢迎消息.我查看了我的NodeJS服务器日志,它正在接收消息.然而,当谈到广播…..它只是不这样做.有没有人有这样的应用程序与我正在尝试的设置一起工作?我应该选择Apache Unicorn吗?
“
我终于想出办法让这个工作.这一点并不明显,但是当在子文件夹上托管socket.io时,不要在connect语句中使用子文件夹.这就是我以前做的,客户端从未收到过回复.
不工作
总结
以上是小编为你收集整理的apache – NGINX配置与Socket.IO一起使用全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
apache
Apache和Nodejs跨域ajax问题
我正在使用两台服务器托pipe在同一台机器上的应用程序,一个是apache,它将作为基本主机为服务PHP页面和其他端点nodejs的其他api通信,整个应用程序build立在主干/牵线木偶/ requirejs /引导。
来到这一点,我的正常页面是从Apache服务器加载,
http://192.168.20.62/project/design.PHP
我已经configuration好了我的模型
define(['backbone'],function(Backbone){ 'use strict'; return Backbone.Model.extend({ url:"http://192.168.20.62:9847/page",defaults: { ... } }); });
当我尝试保存模型时,我正在遭受ajax跨域调用的问题,并且在保存的通信中结束了错误,以下是节点/快速服务器,
var express = require('/root/node_modules/express'); var app = express(); app.configure(function () { app.use(express.json()); app.use(express.urlencoded()); app.use(function (req,res,next) { res.setHeader('Access-Control-Allow-Origin','http://192.168.20.62:9847'); res.setHeader('Access-Control-Allow-Methods','GET,POST,OPTIONS,PUT,PATCH,DELETE'); res.setHeader('Access-Control-Allow-Headers','X-Requested-With,content-type'); res.setHeader('Access-Control-Allow-Credentials',true); next(); }); }) app.post('/page',function(request,response){ console.log(request.body); response.send(request.body); }); app.listen(9847);
正如你所看到的,我已经写了一些补丁在服务器代码,但仍然是相同的,我也已经在根目录添加.htaccess在
http://192.168.20.62
和
http://192.168.20.62:9847
用下面的代码,
Header add Access-Control-Allow-Origin "*" Header add Access-Control-Allow-Headers "origin,x-requested-with,content-type" Header add Access-Control-Allow-Methods "PUT,GET,DELETE,OPTIONS"
但事情并没有帮助反正,如果我运行铬禁用networking安全,那么事情正常工作。
chrome.exe – 禁用networking安全
你们可以请帮我解决这个难题,在此先感谢。
以下是来自chrome JavaScript控制台的错误消息
OPTIONS http://192.168.20.62:9847/page Origin http://192.168.20.62 is not allowed by Access-Control-Allow-Origin. jquery-2.0.3.min.js:6 XMLHttpRequest cannot load http://192.168.20.62:9847/page. Origin http://192.168.20.62 is not allowed by Access-Control-Allow-Origin.
哎呀我找出问题,我已经安装了错误的网址为白色上市。
res.setHeader('Access-Control-Allow-Origin','http://192.168.20.62');
我必须将产生跨域的源URL列入白名单,这是唯一必须做的事情来使事情运行。
这也有浏览器版本的影响,当我发布这个问题时,我正在检查与火狐版本24.0。*,当我升级25.0它已经停止产生跨域错误令人惊讶。 但仍然铬给自然跨域错误,当我仔细阅读铬的错误信息,我来知道,我已经列入了错误的网址白名单。
XMLHttpRequest cannot load http://192.168.20.62:9847/page. The 'Access-Control-Allow-Origin' whitelists only 'http://192.168.20.62:9847'. Origin 'http://192.168.20.62' is not in the list,and is therefore not allowed access.
如果你不必处理WebSocket,那么通过mod_proxy把Node.js放在Apache的后面:
Loadmodulee proxy_module modules/mod_proxy.so Loadmodulee proxy_http_module modules/mod_proxy_http.so Loadmodulee rewrite_module modules/mod_rewrite.so # disable use as forward proxy ProxyRequests Off # don't handle Via: headers - we don't care about them ProxyVia Off # no need to transport host name - not doing virtual hosting ProxyPreserveHost Off ProxyPass /page/ http://192.168.20.62:9847/page/ ProxyPassReverse /page/ http://192.168.20.62:9847/page/ # If you get HTTP status code 502 (Bad Gateway),maybe this Could help SetEnv force-proxy-request-1.0 1 SetEnv proxy-nokeepalive 1
在您的网页中,您可以使用与您的Apache相同的端口来访问您的API,并且跨域/相同原则策略没有任何问题。
你现在只需分开你的URI,例如/ page /只存在于node.js应用程序中。
如果您仅通过node.js提供REST(无HTML / CSS /图像),则使用JSONP将是另一种选择。 这里是一个很好的+简短的描述如何处理Express中的JSONP
Heroku Node.js应用程序上的Socket.io和多个Dyno WebSocket在连接建立之前关闭
当我只使用1个dyno时,websockets连接正常工作,但当我缩放到> 1时,我收到以下错误
POST
http://****.herokuapp.com/socket.io/?EIO=2&transport=polling&t=1412600135378-1&sid=zQzJJ8oPo5p3yiwIAAAC
400 (Bad Request) socket.io-1.0.4.js:2WebSocket connection to
‘ws://****.herokuapp.com/socket.io/?EIO=2&transport=websocket&sid=zQzJJ8oPo5p3yiwIAAAC’
Failed: WebSocket is closed before the connection is established.
socket.io-1.0.4.js:2
我正在使用Redis适配器来启用多个Web进程
var io = socket.listen(server); var redisAdapter = require('socket.io-redis'); var redis = require('redis'); var pub = redis.createClient(18049,'[URI]',{auth_pass:"[PASS]"}); var sub = redis.createClient(18049,{detect_buffers: true,auth_pass:"[PASS]"} ); io.adapter( redisAdapter({pubClient: pub,subClient: sub}) );
这是在本地主机(我正在使用工头运行,如Heroku,我启动2个Web过程,与Heroku相同)上工作。
在我实现了redis适配器之前,我遇到了一个Web-sockets握手错误,所以适配器有一些效果。此外,它现在偶尔工作,我假设当插座匹配相同的网页动态。
我也试图启用粘性会话,但是它从来没有工作。
var sticky = require('sticky-session'); sticky(1,server).listen(port,function (err) { if (err) { console.error(err); return process.exit(1); } console.log('Worker listening on %s',port); });
解决方法
WebSockets在多个dynos上在Heroku开箱即用; socket.io(和其他实时库)使用回退到无状态进程,如xhr轮询,没有会话关联。
要扩展socket.io应用程序,请先按照socket.io中的所有说明进行操作:
> http://socket.io/docs/using-multiple-nodes/
然后,启用您的应用程序的会话兴趣(这是一个免费的功能):
> https://devcenter.heroku.com/articles/session-affinity
关于如何使Apache和Node.js与Socket.io安装程序工作?和apache nodejs的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发、apache – NGINX配置与Socket.IO一起使用、Apache和Nodejs跨域ajax问题、Heroku Node.js应用程序上的Socket.io和多个Dyno WebSocket在连接建立之前关闭等相关内容,可以在本站寻找。
本文标签: