Socket Programming with Python and PubNub

1,315
PubNub
Build real-time apps quickly and scale them globally.

Sockets (aka socket programming) enable programs to send and receive data, bi-directionally, at any given moment. This tutorial walks through how you can send data from device-to-device, client-to-server, and vice versa using socket programming in Python.

Why use sockets to send data?

Internet-connected applications that need to operate in realtime greatly benefit from the implementation of sockets in their networking code. Some examples of apps that use socket programming are:

Python, unlike JavaScript, is a language that executes synchronously. This is why asyncio was developed – to make Python more robust, particularly for the nature of socket programming.

With streaming sockets, data can be sent or received at any time. In case your Python program is in the middle of executing some code, other threads can handle the new socket data. Libraries like asyncio implement multiple threads, so your Python program can work in an asynchronous fashion.

Python Socket Programming Tutorial

Natively, Python provides a socket class so developers can easily implement socket objects in their source code. To use a socket object in your program, start off by importing the socket library. No need to install it with a package manager, it comes out of the box with Python.

import socket

Now we can create socket objects in our code.

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

This code creates a socket object that we are storing in the “sock” variable. The constructor is provided a family and type parameter respectively. The family parameter is set to the default value, which is the Address Format Internet.

The type parameter is set to Socket Stream, also the default which enables “sequenced, reliable, two-way, connection-based byte streams” over TCP1.

Once we have an initialized socket object, we can use some methods to open a connection, send data, receive data, and finally close the connection.

## Connect to an IP with Port, could be a URL
sock.connect(('0.0.0.0', 8080))

## Send some data, this method can be called multiple times
sock.send("Twenty-five bytes to send")

## Receive up to 4096 bytes from a peer
sock.recv(4096)

## Close the socket connection, no more data transmission
sock.close()

Python Socket Server

Now that we know a few methods for transmitting bytes, let’s create a client and server program with Python.

import socket

serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

serv.bind(('0.0.0.0', 8080))
serv.listen(5)

while True:
    conn, addr = serv.accept()
    from_client = ''

    while True:
        data = conn.recv(4096)
        if not data: break
        from_client += data
        print from_client

        conn.send("I am SERVER\n")

    conn.close()
    print 'client disconnected'

This code makes a socket object, and binds it to localhost’s port 8080 as a socket server. When clients connect to this address with a socket connection, the server listens for data, and stores it in the “data” variable.

Next, the program logs the client data using “print,” and then sends a string to the client: I am SERVER.

Let’s take a look at client code that would interact with this server program.

Python Socket Client

Here is the client socket demo code.

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('0.0.0.0', 8080))

client.send("I am CLIENT\n")

from_server = client.recv(4096)

client.close()

print from_server

This client opens up a socket connection with the server, but only if the server program is currently running. To test this out yourself, you will need to use 2 terminal windows at the same time.

Next, the client sends some data to the server: I am CLIENT

Then the client receives some data it anticipates from the server.

Done! You can now get started streaming data between clients and servers using some basic Python network programming.

How Do You Send Data Between Clients?

Sending data between 2 or more client devices over the internet is tricky. Due to protections implemented by network security, not all devices connected to the world wide web have a publicly accessible internet protocol (IP) address.

This means that the Python code that we implemented will not be 100% reliable for sending peer-to-peer data in our realtime app. How do we achieve reliability and speed when transmitting peer-to-peer data?

This can be accomplished using a server in the middle. Client devices using the internet can connect to a server with a public IP address (or a website domain). Then, this broker in the middle can pass messages routed to 1 or many clients.

PubNub does this best with the Pub/Sub API. It is fast, reliable, secure, and easy to implement on any client device. Whether you have a Python server, a JavaScript website, or anything in between, you can use PubNub to send data to anyone in under 250ms.

With One-to-Many, One-to-One, or Many-to-Many, PubNub scales automatically to support any application load. Using the API opens up an instant, always-on connection between all clients that have the Pub/Sub API keys. This accomplishes the same objectives as a socket connection.

PubNub and Python with an SSL Connection

Here is an example of peer-to-peer data that is sent with PubNub, on a single channel, with SSL. You can think of this like sending data over a TCP socket. When you sign up for a free PubNub account, you can use a practically infinite number of channels to send messages in realtime. Before you try the code, be sure to make a free PubNub account.

Client 1

from pubnub.callbacks import SubscribeCallback
from pubnub.enums import PNStatusCategory
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub
import time
import os

pnconfig = PNConfiguration()

pnconfig.publish_key = 'your pubnub publish key here'
pnconfig.subscribe_key = 'your pubnub subscribe key here'
pnconfig.ssl = True

pubnub = PubNub(pnconfig)

def my_publish_callback(envelope, status):
    # Check whether request successfully completed or not
    if not status.is_error():
        pass

class MySubscribeCallback(SubscribeCallback):
    def presence(self, pubnub, presence):
        pass
    def status(self, pubnub, status):
        pass
    def message(self, pubnub, message):
        print "from device 2: " + message.message

pubnub.add_listener(MySubscribeCallback())
pubnub.subscribe().channels("chan-1").execute()

## publish a message
while True:
    msg = raw_input("Input a message to publish: ")
    if msg == 'exit': os._exit(1)
    pubnub.publish().channel("chan-1").message(str(msg)).pn_async(my_publish_callback)

Client 2

Strings can be entered on the command line for these 2 client programs. Maximum message size for PubNub publishing is 32kb. Use 2 terminal windows to try out the code!


from pubnub.callbacks import SubscribeCallback
from pubnub.enums import PNStatusCategory
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub
import time
import os

pnconfig = PNConfiguration()

pnconfig.publish_key = 'your pubnub publish key here'
pnconfig.subscribe_key = 'your pubnub subscribe key here'
pnconfig.ssl = True

pubnub = PubNub(pnconfig)

def my_publish_callback(envelope, status):
    # Check whether request successfully completed or not
    if not status.is_error():
        pass

class MySubscribeCallback(SubscribeCallback):
    def presence(self, pubnub, presence):
        pass
    def status(self, pubnub, status):
        pass
    def message(self, pubnub, message):
        print "from device 1: " + message.message

pubnub.add_listener(MySubscribeCallback())
pubnub.subscribe().channels("chan-1").execute()

## publish a message
while True:
    msg = raw_input("Input a message to publish: ")
    if msg == 'exit': os._exit(1)
    pubnub.publish().channel("chan-1").message(str(msg)).pn_async(my_publish_callback)

All of the code in this post is hosted on GitHub in the Python Socket Demo repository.

PubNub is entirely free up to 1 million messages per month. For more capability of the API, check out the PubNub Python v4 SDK documentation, or any of the other 75+ PubNub client SDKs.

PubNub
Build real-time apps quickly and scale them globally.
Tools mentioned in article
Open jobs at PubNub
Software Engineer
- US
<p class="p1"><strong>ABOUT US</strong></p> <p class="p1">PubNub powers apps that bring people together in real-time for remote work, play, learning, and health. Thousands of companies use PubNub’s developer platform and APIs as the foundation for their online chat, virtual events, geolocation, remote control, and real-time updates on a massive global scale. Since 2010, PubNub has invested in the tools and global infrastructure required to serve customers like Adobe, DocuSign, Peloton, and RingCentral, delivering SOC 2 Type 2 security and reliability while meeting regulatory needs like HIPAA and GDPR. PubNub has raised over $130M from notable investors like Raine Group, Sapphire, Scale, Relay, Cisco, Bosch, Ericsson, and HPE.</p> <p>PubNub is proud to be an EEO employer.</p> <p><strong>ABOUT THE JOB</strong></p> <p><span style="font-weight: 400;">PubNub is seeking a Software Engineer (2+ years of experience) with strong distributed software experience in the cloud.&nbsp; The candidate will serve as a cross-team resource, helping to architect, design, implement, and extend large scale, cloud-based systems as part of PubNub’s new product initiatives.&nbsp; The successful candidate should be able to work effectively as a remote team member residing in the U.S.</span></p> <p><span style="font-weight: 400;">The ideal candidate has multi-disciplinary domain expertise in developing cloud systems at scale leveraging&nbsp; broad knowledge of building data models, microservices, networking, API design, and devops.&nbsp; The candidate should be comfortable both in providing technical leadership, and in hands on implementation as a resource for server engineering teams.</span></p> <p><span style="font-weight: 400;">As a Software Engineer you will be designing and developing awesome new features that our customers will love. You’ll be working with existing services and you’ll be building new ones from scratch.&nbsp; You’ll make sure that your code lives up to our high quality standards and we always maintain our customer SLAs.</span></p> <p><span style="font-weight: 400;">We are a strong team of Engineers who are low on drama and high on results. Our mission is to provide highly available systems with uptime, performance and scale that extend the possibilities of real-time applications and data. We do this with resilience and speed providing our customers with the trust and confidence to deliver disruptive applications with groundbreaking user experiences.&nbsp;&nbsp;</span></p> <p><span style="font-weight: 400;">We focus on innovation and teamwork. Consequently, we place the team ahead of the individual when solving problems and celebrating achievements. If you are on a journey to seek a team whose modus operandi is to swarm hard problems and deliver great outcomes, we are your destination!</span></p> <p><strong>Responsibilities</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Analyze, design, develop, and write tests for leading edge solutions extending PubNub core services&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Maintain product API development and management</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ensure that solutions meet requirements outlined in the design documentation</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Maintain and enhance core messaging services at scale with best practice design principles, CI/CD Deployment procedures</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Model system behaviors using best practice methods for communicating architecture and design</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Build comprehensive DevOps into the delivery architecture including, but not limited to: automated testing, continuous integration, branching and merging code streams, build generation, and deployments</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Recommend tools and utilities for the design, development, testing, and management of web-based applications</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Help support and build cohesive engineering teams with remote resources</span></li> </ul> <p><strong>ABOUT YOU</strong></p> <p><strong>Minimum Qualifications:</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Bachelor's degree in Computer Science, Computer Engineering or related field required or equivalent professional experience</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">2+ years experience with end-to-end design and development, and troubleshooting of high scale cloud services,&nbsp; and developing technical business solutions in general</span></li> </ul> <p><strong>Additional Skills Needed:&nbsp;</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Past experience in public cloud deployments (AWS, Google Cloud Platform, Azure, Rackspace, SoftLayer, etc.)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with AWS EKS or other cloud-hosted Kubernetes clusters (EKS preferred)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience developing various persistence technologies including NoSql, Cassandra, GraphQL, and related technologies in a distributed/replicated environment.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">In-depth understanding of performance testing and best practices; with the ability to properly tune complex and high-traffic applications/systems</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Comfort in a startup environment being relatively self-supported in a distributed cloud-based architecture</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ability to use a broad portfolio of open-source technologies and cloud services</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with automation/configuration management</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with high-volume, high reliability services requiring the need for scaling and load distribution</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with unit and integration testing strategies for streaming applications. Dedication to achieving reliability via high levels of automated test coverage</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Self-directed and self-motivated with the ability to take charge or play a supporting role.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ability to work &amp; collaborate effectively in a remote team environment.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Clear written and verbal communications skills.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Critical thinker and problem-solving skills.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Broad programming language skills and experience (strong golang experience preferred)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with data serialization and schema evolution tools and development strategies, e.g.. Avro, JSON Schema, Protocol Buffers or equivalent</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with containerized applications using Docker or equivalent</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience building operational monitoring solutions around Kubernetes orchestrated service offerings</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with configuration as code paradigm (CI/CD pipelines, Terraform/Terragrunt)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with developing in Rust</span></li> </ul> <p>&nbsp;</p>
Sr. Software Engineer
Katowice, Poland
<p><strong>ABOUT US</strong></p> <p><span style="font-weight: 400;">PubNub powers apps that bring people together in real-time for remote work, play, learning, and health. Thousands of companies use PubNub’s developer platform and APIs as the foundation for their online chat, virtual events, geolocation, remote control, and real-time updates on a massive global scale. Since 2010, PubNub has invested in the tools and global infrastructure required to serve customers like Adobe, DocuSign, Peloton, and RingCentral, delivering SOC 2 Type 2 security and reliability while meeting regulatory needs like HIPAA and GDPR. In addition, PubNub has raised over $130M from notable investors like Raine Group, Sapphire, Scale, Relay, Cisco, Bosch, Ericsson, and HPE.</span></p> <p><span style="font-weight: 400;">PubNub is proud to be an EEO employer.</span></p> <p><strong>ABOUT THE JOB</strong></p> <p><span style="font-weight: 400;">We are looking for a senior level backend or full stack software engineer experienced in building data streaming and real time applications. The Candidate should possess a solid knowledge of the Kafka / Confluent ecosystem and Kotlin programming language.&nbsp;</span></p> <p><span style="font-weight: 400;">We are a growing team that works collaboratively with the product, support, SRE, and engineering colleagues to enhance the PubNub platform and bring new ideas to life. We do this by using qualitative and quantitative data to understand our users and their goals, explore solutions, prototype, evaluate and deliver high-quality engineering solutions. This is an exciting time to join, where you can help shape how serverless technologies work at PubNub.</span></p> <p><strong>Responsibilities</strong></p> <p><em><span style="font-weight: 400;">Reporting to the Senior Engineering Manager and working independently or with other Software engineers, Product Manager and SRE engineers you will be involved in a wide range of engineering tasks and activities. Your work will support the growth and improvement of the PubNub platform. In this role, you will:</span></em></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Design and build PubNub’s Serverless Events &amp; Actions solution</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Champion adherence to the best practice of development methodologies across the entire team and help establish standards.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Work collaboratively with other Engineering teams, Product Management, Marketing, Sales, and Customer Success to develop new features and create customer value.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Build comprehensive DevOps into the delivery architecture including, but not limited to: automated testing, continuous integration, branching and merging code streams, build generation, and deployments</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ensure a high level of test coverage for all code written, including unit and automated regression tests.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ensure that solutions meet requirements outlined in the design documentation</span></li> </ul> <p><strong>ABOUT YOU</strong></p> <p><strong>Minimum Qualifications</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Bachelor's degree in Computer Science, Computer Engineering or related field required or equivalent professional experience</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">7+ years experience with end-to-end design and development, and troubleshooting of high scale cloud services,&nbsp; and developing technical business solutions in general</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with Kafka / Confluent ecosystem (Kafka Connect and Streams, Schema Registry)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with developing in Kotlin</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with containerised applications using Docker or equivalent</span></li> </ul> <p><strong>Additional Skills Needed</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Past experience in public cloud deployments (AWS, Google Cloud Platform, Azure, Rackspace, SoftLayer, etc.).</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with AWS EKS or other cloud-hosted Kubernetes clusters (EKS preferred)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Self-directed and self-motivated with the ability to take charge or play a supporting role.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ability to work &amp; collaborate effectively in a remote team environment.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Clear written and verbal communications skills.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Critical thinking and problem-solving skills.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with data serialization and schema evolution tools and development strategies, e.g.. Avro, JSON Schema, Protocol Buffers or equivalent</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Broad programming language skills and experience (strong Golang and/or Rust experience or desire to learn is highly beneficial)</span></li> </ul> <p><strong>Beneficial skills</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with high-volume, high reliability services requiring the need for scaling and load distribution</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">In-depth understanding of performance testing and best practices; with the ability to properly tune complex and high-traffic applications/systems.&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with unit and integration testing strategies for streaming applications. Dedication to achieving reliability via high levels of automated test coverage</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Comfort in a startup environment being relatively self-supported in a distributed cloud-based architecture</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience building operational monitoring solutions around Kubernetes orchestrated service offerings</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with configuration as code paradigm (CI/CD pipelines, Terraform/Terragrunt) and automation/configuration management</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience building applications in React / Typescript&nbsp;</span></li> </ul> <p><strong>WHY </strong><strong>PUBNUB</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">B2B (Poland)&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Open paid time off</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Monthly internet &amp; phone stipend</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Stock Options</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">PubNub Perks!&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">All the hardware that you need to work effectively</span></li> </ul>
Sr. Software Engineer
Katowice, Poland
<p><strong>ABOUT US</strong></p> <p><span style="font-weight: 400;">PubNub powers apps that bring people together in real-time for remote work, play, learning, and health. Thousands of companies use PubNub’s developer platform and APIs as the foundation for their online chat, virtual events, geolocation, remote control, and real-time updates on a massive global scale. Since 2010, PubNub has invested in the tools and global infrastructure required to serve customers like Adobe, DocuSign, Peloton, and RingCentral, delivering SOC 2 Type 2 security and reliability while meeting regulatory needs like HIPAA and GDPR. In addition, PubNub has raised over $130M from notable investors like Raine Group, Sapphire, Scale, Relay, Cisco, Bosch, Ericsson, and HPE.</span></p> <p><span style="font-weight: 400;">PubNub is proud to be an EEO employer.</span></p> <p><strong>ABOUT THE JOB</strong></p> <p><span style="font-weight: 400;">We are looking for a senior level backend or full stack software engineer experienced in building data streaming and real time applications. The Candidate should possess a solid knowledge of the Kafka / Confluent ecosystem and Kotlin programming language.&nbsp;</span></p> <p><span style="font-weight: 400;">We are a growing team that works collaboratively with the product, support, SRE, and engineering colleagues to enhance the PubNub platform and bring new ideas to life. We do this by using qualitative and quantitative data to understand our users and their goals, explore solutions, prototype, evaluate and deliver high-quality engineering solutions. This is an exciting time to join, where you can help shape how serverless technologies work at PubNub.</span></p> <p><strong>Responsibilities</strong></p> <p><em><span style="font-weight: 400;">Reporting to the Senior Engineering Manager and working independently or with other Software engineers, Product Manager and SRE engineers you will be involved in a wide range of engineering tasks and activities. Your work will support the growth and improvement of the PubNub platform. In this role, you will:</span></em></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Design and build PubNub’s Serverless Events &amp; Actions solution</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Champion adherence to the best practice of development methodologies across the entire team and help establish standards.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Work collaboratively with other Engineering teams, Product Management, Marketing, Sales, and Customer Success to develop new features and create customer value.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Build comprehensive DevOps into the delivery architecture including, but not limited to: automated testing, continuous integration, branching and merging code streams, build generation, and deployments</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ensure a high level of test coverage for all code written, including unit and automated regression tests.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ensure that solutions meet requirements outlined in the design documentation</span></li> </ul> <p><strong>ABOUT YOU</strong></p> <p><strong>Minimum Qualifications</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Bachelor's degree in Computer Science, Computer Engineering or related field required or equivalent professional experience</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">7+ years experience with end-to-end design and development, and troubleshooting of high scale cloud services,&nbsp; and developing technical business solutions in general</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with Kafka / Confluent ecosystem (Kafka Connect and Streams, Schema Registry)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with developing in Kotlin</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with containerised applications using Docker or equivalent</span></li> </ul> <p><strong>Additional Skills Needed</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Past experience in public cloud deployments (AWS, Google Cloud Platform, Azure, Rackspace, SoftLayer, etc.).</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with AWS EKS or other cloud-hosted Kubernetes clusters (EKS preferred)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Self-directed and self-motivated with the ability to take charge or play a supporting role.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ability to work &amp; collaborate effectively in a remote team environment.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Clear written and verbal communications skills.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Critical thinking and problem-solving skills.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with data serialization and schema evolution tools and development strategies, e.g.. Avro, JSON Schema, Protocol Buffers or equivalent</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Broad programming language skills and experience (strong Golang and/or Rust experience or desire to learn is highly beneficial)</span></li> </ul> <p><strong>Beneficial skills&nbsp;</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with high-volume, high reliability services requiring the need for scaling and load distribution</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">In-depth understanding of performance testing and best practices; with the ability to properly tune complex and high-traffic applications/systems.&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with unit and integration testing strategies for streaming applications. Dedication to achieving reliability via high levels of automated test coverage</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Comfort in a startup environment being relatively self-supported in a distributed cloud-based architecture</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience building operational monitoring solutions around Kubernetes orchestrated service offerings</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with configuration as code paradigm (CI/CD pipelines, Terraform/Terragrunt) and automation/configuration management</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience building applications in React / Typescript&nbsp;</span></li> </ul> <p><strong>WHY </strong><strong>PUBNUB</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">B2B (Poland)&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Open paid time off</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Monthly internet &amp; phone stipend</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Stock Options</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">PubNub Perks!&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">All the hardware that you need to work effectively</span></li> </ul>
Sr. Software Engineer
Estonia
<p><strong>ABOUT US</strong></p> <p><span style="font-weight: 400;">PubNub powers apps that bring people together in real-time for remote work, play, learning, and health. Thousands of companies use PubNub’s developer platform and APIs as the foundation for their online chat, virtual events, geolocation, remote control, and real-time updates on a massive global scale. Since 2010, PubNub has invested in the tools and global infrastructure required to serve customers like Adobe, DocuSign, Peloton, and RingCentral, delivering SOC 2 Type 2 security and reliability while meeting regulatory needs like HIPAA and GDPR. In addition, PubNub has raised over $130M from notable investors like Raine Group, Sapphire, Scale, Relay, Cisco, Bosch, Ericsson, and HPE.</span></p> <p><span style="font-weight: 400;">PubNub is proud to be an EEO employer.</span></p> <p><strong>ABOUT THE JOB</strong></p> <p><span style="font-weight: 400;">We are looking for a senior level backend or full stack software engineer experienced in building data streaming and real time applications. The Candidate should possess a solid knowledge of the Kafka / Confluent ecosystem and Kotlin programming language.&nbsp;</span></p> <p><span style="font-weight: 400;">We are a growing team that works collaboratively with the product, support, SRE, and engineering colleagues to enhance the PubNub platform and bring new ideas to life. We do this by using qualitative and quantitative data to understand our users and their goals, explore solutions, prototype, evaluate and deliver high-quality engineering solutions. This is an exciting time to join, where you can help shape how serverless technologies work at PubNub.</span></p> <p><strong>Responsibilities</strong></p> <p><em><span style="font-weight: 400;">Reporting to the Senior Engineering Manager and working independently or with other Software engineers, Product Manager and SRE engineers you will be involved in a wide range of engineering tasks and activities. Your work will support the growth and improvement of the PubNub platform. In this role, you will:</span></em></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Design and build PubNub’s Serverless Events &amp; Actions solution</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Champion adherence to the best practice of development methodologies across the entire team and help establish standards.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Work collaboratively with other Engineering teams, Product Management, Marketing, Sales, and Customer Success to develop new features and create customer value.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Build comprehensive DevOps into the delivery architecture including, but not limited to: automated testing, continuous integration, branching and merging code streams, build generation, and deployments</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ensure a high level of test coverage for all code written, including unit and automated regression tests.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ensure that solutions meet requirements outlined in the design documentation</span></li> </ul> <p><strong>ABOUT YOU</strong></p> <p><strong>Minimum Qualifications</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Bachelor's degree in Computer Science, Computer Engineering or related field required or equivalent professional experience</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">7+ years experience with end-to-end design and development, and troubleshooting of high scale cloud services,&nbsp; and developing technical business solutions in general</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with Kafka / Confluent ecosystem (Kafka Connect and Streams, Schema Registry)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with developing in Kotlin</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with containerised applications using Docker or equivalent</span></li> </ul> <p><strong>Additional Skills Needed</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Past experience in public cloud deployments (AWS, Google Cloud Platform, Azure, Rackspace, SoftLayer, etc.).</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with AWS EKS or other cloud-hosted Kubernetes clusters (EKS preferred)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Self-directed and self-motivated with the ability to take charge or play a supporting role.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ability to work &amp; collaborate effectively in a remote team environment.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Clear written and verbal communications skills.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Critical thinking and problem-solving skills.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with data serialization and schema evolution tools and development strategies, e.g.. Avro, JSON Schema, Protocol Buffers or equivalent</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Broad programming language skills and experience (strong Golang and/or Rust experience or desire to learn is highly beneficial)</span></li> </ul> <p><strong>Beneficial skills</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with high-volume, high reliability services requiring the need for scaling and load distribution</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">In-depth understanding of performance testing and best practices; with the ability to properly tune complex and high-traffic applications/systems.&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with unit and integration testing strategies for streaming applications. Dedication to achieving reliability via high levels of automated test coverage</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Comfort in a startup environment being relatively self-supported in a distributed cloud-based architecture</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience building operational monitoring solutions around Kubernetes orchestrated service offerings</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with configuration as code paradigm (CI/CD pipelines, Terraform/Terragrunt) and automation/configuration management</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience building applications in React / Typescript&nbsp;</span></li> </ul> <p><strong>WHY </strong><strong>PUBNUB</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">B2B (Poland)&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Open paid time off</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Monthly internet &amp; phone stipend</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Stock Options</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">PubNub Perks!&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">All the hardware that you need to work effectively</span></li> </ul>
Verified by
You may also like