Skip to content

Websockets are automatically closed after response #691

@Marco-Sulla

Description

@Marco-Sulla

Steps to reproduce:

  1. Install aiohttp>=0.15.0
  2. Create server.py with this code:
import asyncio
from aiohttp import web


@asyncio.coroutine
def handle(request):
    name = request.match_info.get('name', "Anonymous")
    text = "Hello, " + name
    return web.Response(body=text.encode('utf-8'))


def wshandler(request):

    msg = b"Hello"

    ws = web.WebSocketResponse()

    print("before start")
    yield from ws.prepare(request)
    print("after start")

    ws.send_bytes(msg)

    return ws


@asyncio.coroutine
def init(loop):
    app = web.Application(loop=loop)
    app.router.add_route('GET', '/echo', wshandler)
    app.router.add_route('GET', '/{name}', handle)

    srv = yield from loop.create_server(app.make_handler(),
                                        '127.0.0.1', 8088)
    print("Server started at http://127.0.0.1:8088")
    return srv

loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()

Substitute yield from ws.prepare(request) with ws.start(request) for older versions.

  1. Run the server
  2. Open your browser at http://127.0.0.1:8088/Marco
  3. Open the browser console
  4. Paste this code:
ws = new WebSocket("ws://127.0.0.1:8088/echo");
ws.binaryType = "arraybuffer";

ws.onopen = function (e) {
    console.log("WEBSOCKET OPENED")
}

ws.onclose = function (e) {
    console.log("WEBSOCKET CLOSED")
}

ws.onmessage = function (e) {
  var msg_view = new DataView(e.data);
  var msg_decoder = new TextDecoder("utf-8");
  var msg = msg_decoder.decode(msg_view);
  console.log(msg);
}

ws.onerror = function (e) {
    console.log("SOMETHING WRONG WITH WEBSOCKET")
}

RESULT:

In console is logged:

WEBSOCKET OPENED
Hello
WEBSOCKET CLOSED

EXPECTED:

In console should be logged

WEBSOCKET OPENED
Hello

Metadata

Metadata

Assignees

No one assigned

    Labels

    invalidThis doesn't seem right

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions