{"id":20834482,"url":"https://github.com/komputronika/socketserverpubsub","last_synced_at":"2026-06-01T09:32:04.162Z","repository":{"id":217835907,"uuid":"168961452","full_name":"komputronika/SocketServerPubSub","owner":"komputronika","description":"Script socket server sederhana publish dan subscribe dengan format JSON terinspirasi oleh MQTT untuk keperluan IoT","archived":false,"fork":false,"pushed_at":"2019-04-25T07:12:29.000Z","size":69,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-12-25T21:01:23.601Z","etag":null,"topics":["iot","php","publish-subscribe","socket","tcp-ip"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/komputronika.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-02-03T15:43:39.000Z","updated_at":"2024-06-10T13:43:27.000Z","dependencies_parsed_at":"2024-01-18T13:07:59.102Z","dependency_job_id":"b7765ead-57c1-45ee-b267-1a4118d37cb8","html_url":"https://github.com/komputronika/SocketServerPubSub","commit_stats":null,"previous_names":["komputronika/socketserverpubsub"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/komputronika/SocketServerPubSub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/komputronika%2FSocketServerPubSub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/komputronika%2FSocketServerPubSub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/komputronika%2FSocketServerPubSub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/komputronika%2FSocketServerPubSub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/komputronika","download_url":"https://codeload.github.com/komputronika/SocketServerPubSub/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/komputronika%2FSocketServerPubSub/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33769490,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["iot","php","publish-subscribe","socket","tcp-ip"],"created_at":"2024-11-18T00:19:25.790Z","updated_at":"2026-06-01T09:32:04.140Z","avatar_url":"https://github.com/komputronika.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Socket Server Publish dan Subscribe \n\nSebuah script untuk membuat socket server dengan metode publish dan subscribe, terinspirasi dari MQTT.\n\nFormat data yang digunakan adalah JSON dan bisa digunakan untuk IoT misalnya dengan Arduino dan board yang menggunakan chip ESP8266 dan sebagainya.\n\nMudah dipelajari, mudah dikembangkan, lalu-lintas data lebih kecil dibandingkan menggunakan protokol HTTP karena data yang dikirimkan berupa JSON murni tanpa header.\n\nSudah mendukung WebSocket, sehingga client bisa subscribe dan publish secara realtime melalui web browser / Javascript.\n\n\u003cimg src=\"http://i63.tinypic.com/nzovfs.png\"\n     alt=\"JSON Socket Server\"\n     style=\"width:100%\" /\u003e\n\n## Format Data\n\n#### Subscribe\nKirimkan string seperti di bawah ini untuk melakukan subscribe pada sebuah topik.\n    \n    {\"action\":\"sub\", \"topic\":\"nama_topic\"}\n\n#### Publish\nKirimkan string seperti di bawah ini untuk mem-publish data baru ke subscriber. \n\n    {\"action\":\"pub\", \"topic\":\"nama_topic\", \"data\": \"teks data\"}\n    \n    // atau\n    \n    {\"action\":\"pub\", \"topic\":\"nama_topic\", \"data\": {\"var1\":val1, \"var2\":val2, ...} }\n#### Data dari Server   \nIni adalah format data yang akan diterima oleh client pada saat ada publish baru pada topik yang diikuti.\n\n    {\"data\": \"teks data\"}\n    \n    // atau\n    \n    {\"data\": {\"var1\":val1, \"var2\":val2, ...} }  \n\n## Cara Menjalankan Server\nAnda memerlukan PHP untuk menjalakan script ini. Ketik seperti ini pada terminal:\n\n    php socket-server.php\n\n## Menghubungkan Client ke Server\nUntuk mengetes socket server ini, silahkan jalankan telnet pada windows/tab terminal terpisah:\n\n    telnet 127.0.0.1 4444\n\nSetelah itu, ketiklah seperti ini baris per baris:\n\n    {\"action\":\"sub\",\"topic\":\"relay\"}\n    {\"action\":\"pub\",\"topic\":\"relay\",\"data\":\"on\"}\n\nBila koneksi berhasil, anda akan mendapatkan balasan di halaman telnet seperti ini (karena baru saja subscribe pada topik 'relay'):\n\n    {\"data\":\"on\"}\n\n## Contoh Program Client\nPada repo ini sudah juga sudah disertakan contoh-contoh program client dengan PHP, Python, NodeJS, C, Arduino, App Inventor. Contoh client dibuat sederhana agar potongan-potongan kode client tersebut mudah disisipkan pada proyek utama anda. \n    \n## Monitoring Pada Server\nPada terminal server akan dilihat log sebagai berikut:\n\n    JSON Socket Server\n    Aktif pada IP:0.0.0.0, port:4444\n    2019-02-06 08:25:06 Koneksi baru dari 127.0.0.1:52136\n    2019-02-06 08:25:06 Data masuk dari 127.0.0.1:52136\n    2019-02-06 08:25:06 Type = tcp\n    2019-02-06 08:25:06 Subscriber baru pada topik \u003crelay\u003e\n    2019-02-06 08:25:06 Data subscriber sekarang:\n    2019-02-06 08:25:06 1) relay =\u003e 1 client\n    2019-02-06 08:25:06 Publish baru pada topik \u003crelay\u003e\n    2019-02-06 08:25:06 Selesai mengirim publish pada topik \u003crelay\u003e ke 1 subscriber\n    2019-02-06 08:25:06 Sebuah client terputus, jumlah sekarang: 0 client\n    \nLog di atas memudahkan kita melakukan debug pada script dan untuk melihat lalu-lintas data.\n\nBila tidak ingin menampilkan log, atur konfigurasi seperti ini:\n\n    $config[\"verbose\"] = false;\n\n## Menjalankan Script di Server \nBila ingin membuat server socket ini menjadi online dan dapat diakses secara publik, \nmaka perlu sebuah server di rumah/kantor yang selalu online, atau dengan menyewa sebuah VPS.\n\n**Rekomendasi VPS:**\n\n[![Time4VPS](http://i65.tinypic.com/2cfp1te.png)](https://www.time4vps.com/?affid=1643) [![Digital Ocean](http://i68.tinypic.com/122embb.png)](https://m.do.co/c/2fa14040d118) [![Vultr](http://i64.tinypic.com/2pzctts.png)](https://www.vultr.com/?ref=7830794-4F)\n\nUntuk menjalankan script secara background, silahkan buka terminal server dan ketik perintah sebagai berikut:\n\n    nohup php socket-server.php \u0026\n\nDengan `nohup`, server akan menjalankan script php tersebut secara background, script tidak akan stop walaupun user sudah logout dari terminal. \n\n## Pengembangan\nBila menemukan error atau ada usulan, silahkan kirimkan Issue. Bila ingin berkontribusi silahkan fork, modifikasi dan buat Pull Request. Baca juga: [Gihub Workflow](https://www.petanikode.com/github-workflow/) (Bahasa Indonesia)\n\n## Todo\n1. Handshaking pada WebSocket, decode data yang dikirim dari browser (**beres**)\n2. Menghapus client yang sudah terputus dari daftar subscriber (**beres**) \n3. Memproses multi-line string JSON dari client (yang dipisahkan \\n) (**beres**)\n4. Contoh sketch untuk Arduino, ESP8266 (NodeMCU) (**beres**)\n5. Client test dengan PHP (**beres**)\n6. Client test dengan Python (**beres**)\n7. Client test dengan NodeJS (**beres**)\n8. Client test dengan Android (**beres**)\n9. Client test dengan C/C++ - Pakai library cJSON (**beres**)\n10. Contoh aplikasi nyata dengan Relay, Android App, Website\n11. Membuat tutorial di blog\n13. Membuat video demo\n14. Proteksi publish dengan token?\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkomputronika%2Fsocketserverpubsub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkomputronika%2Fsocketserverpubsub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkomputronika%2Fsocketserverpubsub/lists"}