# Webscokets with Julia

**URL:** <https://discourse.julialang.org/t/webscokets-with-julia/23372>\
**Category:** Web Stack\
**Created:** [April 21, 2019, 3:22pm UTC](https://discourse.julialang.org/t/webscokets-with-julia/23372 "2019-04-21T15:22:46Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![KirillGerke](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kirillgerke/32/11383_2.png) [@KirillGerke](https://discourse.julialang.org/u/KirillGerke)\
**Post date:** [April 21, 2019, 3:22pm UTC](https://discourse.julialang.org/t/webscokets-with-julia/23372/1 "2019-04-21T15:22:46Z")

</div>

Hello All,

I am trying to implement something like a chat server and/or fast computation progress exchange from Julia code (to login from anywhere with the browser). The first search gave me WebSockets.jl and HTTP.jl for websockets, but i found docs and examples to be very hard to utilize to build a simple websockets server.  
I actually found something very close to what i want in Python: [https://github.com/prziborowski/npmud](https://github.com/prziborowski/npmud)

The problem is that i do not want to use Python (well, this is why i am using Julia after all).  
Here is basically the code that does all the job in Python:

```julia
import asyncio
import websockets

async def consumer_handler(user):
    while True:
        try:
            message = await user._ws.recv()
            await user.process_input(message)
            consumer(message)
        except websockets.exceptions.ConnectionClosed:
            await user.exit()

async def producer_handler(user):
    while True:
        message, empty = await user.get_message()
        await user.send(message)
        if empty:
            await user.prompt()

async def handler(websocket, path):
    newuser = users.User(websocket)
    if not await newuser.send_welcome():
        return
    users.add(newuser)

    try:
        consumer_task = asyncio.ensure_future(consumer_handler(newuser))
        producer_task = asyncio.ensure_future(producer_handler(newuser))

        done, pending = await asyncio.wait(
            [consumer_task, producer_task],
            return_when=asyncio.FIRST_COMPLETED,
        )

        for task in pending:
            task.cancel()
    finally:
        try: # Try to safely logout user
            await newuser.exit()
        except:
            pass

start_server = websockets.serve(handler, '0.0.0.0', 4000)

loop = asyncio.get_event_loop()
loop.run_until_complete(start_server)
logger.info("Server started.")
try:
    loop.run_forever()
except KeyboardInterrupt:
    logger.info('Shutting down server.')

```

What would be your suggestions to build the same thing from Julia?  
Can i use existing Julia packages to implement similar websockets server?  
Do you know any examples/tutorials with existing packages (well, may be i just did not look deep enough?)  
Or may be some parts of Python routines could be called from Julia using PyCall?  
Any suggestions are welcomed. Thank you in advance,  
K.
