- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图将 socket.io 引入到我用 Laravel 和 AngularJS 开发的应用程序中。
该应用程序在我的计算机上运行良好,但是当我尝试使其在服务器上运行时,我收到错误“GET http://localhost:8080/socket.io/?EIO=3&transport=polling&t=LQxpNjO” net::ERR_CONNECTION_REFUSED'。
服务器运行的是 Ubuntu 16.04,我使用 nginx 作为 Web 服务器。
这是创建 Nodejs 服务器的文件:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
var port = 8080;
http.listen(port, function() {
console.log('Listening on *:' + port);
});
io.on('connection', function (socket) {
console.info('Client connected');
redis.subscribe('counter.increase');
redis.on('message', function (channel, message) {
console.log('Received message ' + message + ' in channel ' + channel);
socket.emit(channel, message);
});
socket.on('disconnect', function() {
console.info('Client disconnected');
});
});
这是应该连接到 Nodejs 服务器的 AngularJS 工厂。这里我使用的是 Angular-socket-io:
angular.module('myServices').factory('socket', function (socketFactory) {
var ioSocket = io.connect('http://localhost:8080');
socket = socketFactory({
ioSocket: ioSocket
});
return socket;
});
这是nginx的配置文件(/etc/nginx/sites-available/default):
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/public;
index index.php index.html index.htm index.nginx-debian.html;
server_name XXX.XXX.XXX.XXX;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
我该如何解决这个问题?
更新1
我像这样更新了 nginx 配置文件:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/public;
index index.php index.html index.htm index.nginx-debian.html;
server_name XXX.XXX.XXX.XXX;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~* \.io {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location ~ /\.ht {
deny all;
}
}
upstream app_yourdomain {
server 127.0.0.1:3000;
keepalive 8;
}
AngularJS 工厂是这样的:
angular.module('myServices').factory('socket', function (socketFactory) {
var ioSocket = io.connect('http://localhost:8080/socket.io');
socket = socketFactory({
ioSocket: ioSocket
});
return socket;
});
现在我收到以下错误:
- 获取http://example.com/bower_components/socket.io-client/socket.io.js
更新2
这些是我的 nginx 配置文件:
upstream app_example.com {
server 127.0.0.1:3000;
keepalive 8;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/public;
index index.php index.html index.htm index.nginx-debian.html;
server_name XXX.XXX.XXX.XXX;
location / {
# First attempt to serve request as file, then as
# directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ ^/(socket\.io) {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location ~ /\.ht {
deny all;
}
}
和 AngularJS 工厂:
angular.module('myServices').factory('socket', function (socketFactory) {
var ioSocket = io.connect('http://localhost');
socket = socketFactory({
ioSocket: ioSocket
});
return socket;
});
工作解决方案
感谢约翰,我终于成功地使应用程序运行起来。
这是 nginx 配置文件:
upstream app_example.com {
server 127.0.0.1:3000;
keepalive 8;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/public;
index index.php index.html index.htm index.nginx-debian.html;
server_name XXX.XXX.XXX.XXX;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ ^/(socket\.io) {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location ~ /\.ht {
deny all;
}
}
这是 AngularJS 工厂:
angular.module('myServices').factory('socket', function (socketFactory) {
var ioSocket = io.connect('http://example.com');
socket = socketFactory({
ioSocket: ioSocket
});
return socket;
});
这是nodejs服务器:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
var port = 3000;
http.listen(port, function() {
console.log('Listening on *:' + port);
});
io.on('connection', function (socket) {
console.info('Client connected');
redis.subscribe('counter.increase');
redis.on('message', function (channel, message) {
console.log('Received message ' + message + ' in channel ' + channel);
socket.emit(channel, message);
});
socket.on('disconnect', function() {
console.info('Client disconnected');
});
});
最佳答案
Socket.io 在您的域名后使用/socket.io。然后你必须指定socket.io位置:
location ~* \.io {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
并且不要忘记 Node js 应用程序的上游
upstream app_yourdomain {
server 127.0.0.1:3000;
keepalive 8;
}
关于angularjs - DigitalOcean 上的 NodeJS 服务器使用 socket.io 返回连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39119682/
我在 digitalocean 托管中有一个站点,但从该站点发送电子邮件时遇到了一些问题。 我的网站建立在 wordpress 上,我正在尝试通过电子邮件提交申请。它在我的本地主机和我的服务器上运行
DigitalOcean 的浮动 IP 是一种保留与您的计算资源无关的公共 IP 地址的方式。它们提供了一种在您的资产之间快速重新路由流量的方法,而无需等待 DNS 更改生效。 诸如 Droplets
我正在在线学习本教程 https://simpleisbetterthancomplex.com/tutorial/2016/10/14/how-to-deploy-to-digital-ocean.
我有一个托管 Ubuntu 服务器的 DigitalOcean droplot,该服务器拒绝连接到所有相关域。我使用 ServerPilot 托管 WordPress 网站,该网站现在向我的服务器 I
我正在 DigitalOcean 上使用 CoreOs 和 Kubernetes 构建一个容器集群,我已经看到为了向世界公开 Pod,您必须创建一个类型为:LoadBalancer 的服务。我认为这是
DigitalOcean有很多one-click apps可用的。它们帮助您使用预安装的软件创建一个 Droplet。但我还没有找到任何关于它们的技术文档。 具体来说: 谁维护这些应用程序? (例如,
我使用 Kubeadm 和 digitalocean 上的 3 个 Droplet 创建了一个 Kubernetes 集群。 ...在为我正在处理的节点 mongodb pod 创建持久卷声明时,使用
我完成了这个 Digital Ocean 教程: https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomc
我正在使用 DigitalOcean 为我的网站提供静态文件。我使用 Django 和 Postgres 作为数据库。我用 DigitalOcean Droplet 部署了我的网站,在 Digital
我在 centos 上使用 digitalocean 脚本,但它似乎不起作用。 https://www.digitalocean.com/community/tutorials/how-to-set-
我在 Digital Ocean 服务器上运行的 Magento 商店有问题。 这是我的液滴配置: 2GB Ram | 40GB SSD Disk | New York 2 | Ubuntu Ubun
DigitalOcean 的Container Registry为您在云中提供了一个私有空间来存储和分发您的 Docker 映像。除了提供图像存储库外,该服务还集成到 DigitalOcean 的其他
我尝试运行 apt-get install httpd安装 Apache HTTP 服务器,但出现以下错误: Package httpd is a virtual package provid
我尝试在 .bashrc 中设置环境变量, .profile , .bash_profile , /etc/environment以及 /etc/defaults/nginx但没有任何效果。仅限 /e
我有一个域 example.com,并且我想将一个子域 test.example.com 指向我的一个 droplets,而不必将域移动到 digital ocean 名称服务器。这可能吗?如何? 最
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
我正在尝试部署我的 jhipster应用程序在 DigitalOcean . 我已经创建了一个 Droplet,使用 ssh 连接到它并从 git 克隆了 jhipster 应用程序.现在我在服务器上
我在 Github 中创建了一个基于 Meteor 平台的新应用程序存储库。但是,我在将应用程序部署到我的 DigitalOcean 液滴时遇到了很大的困难。我正在尝试将我的 Github 存储库连接
我目前正在将 Digital Ocean 与 Amazon S3 SDK 结合使用,并且能够以编程方式上传和删除文件。然而,复制对象似乎是一个大问题。 首先,我的存储桶列表总是返回 0 个结果: s3
目前每次我运行管道时都会得到这个:Permission denied (publickey). 到目前为止的步骤: 在苹果机上: cd ~/.ssh ssh-keygen -t rsa -N '' -
我是一名优秀的程序员,十分优秀!