Difference between socket and websocket?

SocketsWebsocketMod Wsgi

Sockets Problem Overview


I'm building web app that needs to communicate with another application using socket connections. This is new territory for me, so want to be sure that https://stackoverflow.com/questions/152457/what-is-the-difference-between-a-port-and-a-socket">sockets</a> are different than https://stackoverflow.com/questions/4363899/making-moves-w-websockets-and-python-django-twisted">websockets</a>;. It seems like they're only conceptually similar.

Asking because initially I'd planned on using Django as the foundation for my project, but in the SO post I linked to above it's made very clear that websockets aren't possible (or at least not reliable, even with something like django-websockets) using the preferred Django setup (Apache with mod_wsgi). Yet I've found other posts that casually import Python's socket module for something as simple as https://stackoverflow.com/questions/4093999/how-to-use-django-to-get-the-name-for-the-host-server">grabbing the server's hostname.

So:

  • Are they really different?
  • Is there any reason not to use Django for a project that relies on establishing socket connections with an outside server?

Sockets Solutions


Solution 1 - Sockets

To answer your questions.

  1. Even though they achieve (in general) similar things, yes, they are really different. WebSockets typically run from browsers connecting to Application Server over a protocol similar to HTTP that runs over TCP/IP. So they are primarily for Web Applications that require a permanent connection to its server. On the other hand, plain sockets are more powerful and generic. They run over TCP/IP but they are not restricted to browsers or HTTP protocol. They could be used to implement any kind of communication.
  2. No. There is no reason.

Solution 2 - Sockets

Websockets use sockets in their implementation. Websockets are based on a standard protocol (now in final call, but not yet final) that defines a connection "handshake" and message "frame." The two sides go through the handshake procedure to mutually accept a connection and then use the standard message format ("frame") to pass messages back and forth.

I'm developing a framework that will allow you to communicate directly machine to machine with installed software. It might suit your purpose. You can follow my blog if you wish: http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html

Solution 3 - Sockets

WebSocket is just another application level protocol over TCP protocol, just like HTTP.

Some snippets < Spring in Action 4> quoted below, hope it can help you understand WebSocket better.

> In its simplest form, a WebSocket is just a communication channel > between two applications (not necessarily a browser is > involved)...WebSocket communication can be used between any kinds of > applications, but the most common use of WebSocket is to facilitate > communication between a server application and a browser-based application.

Solution 4 - Sockets

You'd have to use WebSockets (or some similar protocol module e.g. as supported by the Flash plugin) because a normal browser application simply can't open a pure TCP socket.

The Socket.IO module available for node.js can help a lot, but note that it is not a pure WebSocket module in its own right.

It's actually a more generic communications module that can run on top of various other network protocols, including WebSockets, and Flash sockets.

Hence if you want to use Socket.IO on the server end you must also use their client code and objects. You can't easily make raw WebSocket connections to a socket.io server as you'd have to emulate their message protocol.

Solution 5 - Sockets

Regarding your question (b), be aware that the Websocket specification hasn't been finalised. According to the W3C:

> Implementors should be aware that this specification is not stable.

Personally I regard Websockets to be waaay too bleeding edge to use at present. Though I'll probably find them useful in a year or so.

Solution 6 - Sockets

WebSocket is a computer communications transport protocol (like TCP, HTTP 1.0, HTTP 1.1, HTTP 2.0, QUIC, WebRTC, etc.)

Socket is an endpoint for sending and receiving data across the network (like Port number)

Example of Socket:

(TCP, 8.8.8.4, 8080, 8.8.8.8, 8070)

where:

(protocol, local address, local port, remote address, remote port)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJonathonView Question on Stackoverflow
Solution 1 - SocketsPablo Santa CruzView Answer on Stackoverflow
Solution 2 - SocketsRoger F. GayView Answer on Stackoverflow
Solution 3 - SocketssmwikipediaView Answer on Stackoverflow
Solution 4 - SocketsAlnitakView Answer on Stackoverflow
Solution 5 - SocketsPhil HuntView Answer on Stackoverflow
Solution 6 - SocketsilluminatoView Answer on Stackoverflow