端口443上的websocket/插座.io在kubernetes的统治下没有工作

2024-05-20 17:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试将我的开发环境转移到minikube上运行。在

页面加载,但我的页面在与索引.html加载了(在本例中为https),而websockets似乎没有正常工作。在

下面是一个在本地开发框上运行nginx/python时正确输出的示例。在

127.0.0.1 - - [14/Sep/2018 14:14:35] "GET / HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /static/jquery.min.js HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /static/socket.io.min.js HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /socket.io/?EIO=3&transport=polling&t=MNPIg-N HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /favicon.ico HTTP/1.0" 404 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /favicon.ico HTTP/1.0" 404 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "POST /socket.io/?EIO=3&transport=polling&t=MNPIg-o&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /socket.io/?EIO=3&transport=polling&t=MNPIg-r&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "POST /socket.io/?EIO=3&transport=polling&t=MNPIg_x&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:35] "GET /socket.io/?EIO=3&transport=polling&t=MNPIg_w&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:40] "GET /socket.io/?EIO=3&transport=polling&t=MNPIh0L&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:45] "GET /socket.io/?EIO=3&transport=polling&t=MNPIiE3&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:50] "GET /socket.io/?EIO=3&transport=polling&t=MNPIjSI&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -
127.0.0.1 - - [14/Sep/2018 14:14:55] "GET /socket.io/?EIO=3&transport=polling&t=MNPIkgS&sid=0570b4fe27f345e9b11858b3acb40a6e HTTP/1.0" 200 -

注意每5秒有一个GET(这是一个在页面上运行的计时器)

在Kubernetes上运行时,页面加载并且计时器显示出来,好像websocket已经工作了一样,但是我没有显示websocket在最初的GET或POST之后有一个GET或POST的日志。在

^{pr2}$

入口设置如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: websitev2-cluster-ip-service
              servicePort: 8080

如前所述,websocket不驻留在不同的端口上,它在javascript中实例化为:

namespace = '/socket';
var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port + namespace);

让websockets工作有什么特殊要求吗?我不认为我需要一个特殊的路由,因为URI需要被发送到与其他所有内容相同的位置,并且在同一个端口上。在

编辑:更多详细信息

我的网站有一个表单,当提交时,执行以下代码:

    $('form#job').submit(function(event) {
        var nameValue = JSON.stringify($(event.target).serializeArray());
        console.log(nameValue)
        socket.emit('job_submit', {data: nameValue});
        return false;
    });

在python方面,我有我的socket代码,一旦用户单击submit按钮,它就会被点击。在

@socketio.on('job_submit', namespace='/socket')
def job_submit(message):
    print('recieved job_submit message from client')
    # kick off subjob in celery task
    data = unstringify(message)
    print('data = {0}'.format(data))
    sessiondata = dict(session)
    print('sessiondata = {}'.format(sessiondata))
    subjobstart.delay(sessiondata, request.sid, data)

在我的日志中,当单击submit按钮时,我没有收到任何“received job_submit message from client”消息,这意味着javascript正在尝试向python服务器发送websocket emit,但消息永远不会到达那里。在

随着时间的推移,从python到客户端页面的emit正在工作。在


Tags: iohttpdatagetjob页面socketpost
1条回答
网友
1楼 · 发布于 2024-05-20 17:21:18

所以不太确定在测试盒上工作时发生了什么变化,显然问题出在我正在做的表单验证中。一旦我设置了一个novalidate选项来临时绕过表单检查,表单就可以提交了,而且我根本没有任何websocket问题。在

希望这篇文章可以帮助别人改为发布代码。在

相关问题 更多 >