Bỏ qua để đến nội dung

Chuyển tiếp cổng từ terminal

Một máy chủ bạn khởi chạy trong terminal của một cuộc hội thoại chỉ được công bố cho space đó. Bảng cổng nhận ra những cổng đang lắng nghe mà ứng dụng này đã khởi chạy ở đó, ánh xạ chúng, và cho bạn một địa chỉ cho mọi nơi bạn có thể muốn truy cập tới. Hai space có thể cùng lắng nghe trên 5173; các ánh xạ của chúng không bao giờ trộn lẫn.

Không có gì ở đây mở toang cỗ máy: mọi đường đi đều do máy chủ tạo ra, theo yêu cầu, và biến mất cùng terminal hoặc rig.

  1. Mở Terminal (VM) hoặc shell host của cuộc hội thoại (trong một space hoặc trên trang PR).
  2. Khởi chạy máy chủ của bạn — pnpm dev, python -m http.server 8000, bất cứ thứ gì.
  3. Trong vài giây, biểu tượng phích cắm ở góc trên bên phải của terminal sẽ có thêm một chấm. Hãy nhấp vào đó.

Bảng này liệt kê mọi cổng đang lắng nghe cùng tiến trình sở hữu nó, dưới dạng 3000 → 3000: bên trái là cổng mà tiến trình đã bind, bên phải là cổng nó trả lời cục bộ (cùng con số khi cổng đó còn trống trên máy của bạn). Mỗi dòng cũng cho biết localhost trên máy tính, Browser (VM) và Android có thể truy cập được nó hay không.

Việc dò tìm được giới hạn: một Terminal (VM) được thăm dò từ bên trong hệ thống khách đó; một shell host được thăm dò từ cây tiến trình PTY của phiên đó. Những space khác, và những tiến trình khác trên máy Mac của bạn, không được liệt kê.

Các cổng mới trong terminal này được chuyển tiếp tự động. Hãy tắt Tự chuyển tiếp cổng trong cùng bảng đó nếu bạn chỉ muốn những cổng do chính bạn thêm vào.

Dùng Sao chép URL cục bộ trên dòng đó — http://localhost:3000. Bản chuyển tiếp chỉ lắng nghe trên loopback, nên không gì khác trên mạng của bạn nhìn thấy được nó.

Nếu hai space cùng để lộ cổng guest 5173 và máy của bạn đã giữ 127.0.0.1:5173, thì space thứ hai vẫn giữ cổng guest 5173 và nhận một cổng cục bộ tạm thời. Sao chép URL dùng con số bên phải.

Trên một shell host, tiến trình vốn đã nằm trên máy của bạn. Ánh xạ cùng một cổng cục bộ không thay đổi gì; chọn một cổng cục bộ khác sẽ bind một proxy loopback vào cổng bạn đã chọn.

--host (hay bind vào 0.0.0.0) không khiến một Browser (VM) khép kín truy cập được một máy chủ trên máy Mac. Hệ thống khách có loopback riêng; máy chủ cắm một tunnel vào hệ thống khách đó khi tab Browser nằm trong cùng space.

Mở trình duyệt khép kín trong cùng cuộc hội thoại. Gõ localhost:<left-hand port> — con số mà tiến trình đã bind. Một ánh xạ lại (5173 → 3000) cũng trả lời ở con số bên phải trong trình duyệt đó, nên Sao chép URL cũng hoạt động ở đó. browser_use của một agent có thể điều hướng tới cả hai. Một máy chủ trong Space A không bao giờ xuất hiện dưới dạng localhost:5173 trong trình duyệt của Space B.

Dùng localhost, không phải một IP LAN và cũng không phải --host. Hệ thống khách có loopback riêng; tunnel lắng nghe ở đó trên cả IPv4 lẫn IPv6.

Những trang mở nhiều kết nối cùng lúc (hàng chục tài nguyên, một socket tải lại trực tiếp) chia sẻ chính tunnel đó. Browser (VM) ghép kênh chúng lên một exec thường trú duy nhất, nên một loạt yêu cầu tải không phải là một tiến trình được sinh ra cho mỗi kết nối và không bị quá thời gian chờ thành một trang trắng.

Trong cùng một space, một bản chuyển tiếp từ Terminal (VM) thắng một shell host trên cùng con số. Giữa các space thì không có thứ tự ưu tiên — chúng là những ánh xạ riêng biệt.

Mở tab Android của space đó. localhost:<port> của trình giả lập sau đó được đảo ngược về cổng đã công bố của space này (adb reverse). Một trình giả lập là toàn cục theo thiết bị: gắn Space B sẽ nhắm lại :5173 về B và bỏ của A. Đóng tab và những đảo ngược mà rig này cắm vào sẽ bị gỡ bỏ.

Trình mô phỏng iOS vốn đã là máy Mac — không cần đảo ngược. Một chiếc iPhone thật vẫn cần một chia sẻ qua mạng LAN.

⋯ → Chia sẻ trên mạng cục bộ công bố cổng tại <server-ip>:<random port> — hữu ích để mở trang trên điện thoại của bạn, hoặc khi máy chủ chạy trên một máy khác.

  • Cổng LAN luôn do hệ điều hành cấp, không bao giờ là con số của guest, nên việc để lộ là một địa chỉ có chủ đích, hiển nhiên thay vì một địa chỉ có thể đoán ra.
  • Nó vẫn riêng tư (chỉ loopback) cho tới khi bạn bật, và ⋯ → Chỉ cục bộ sẽ gỡ nó ra khỏi mạng.

⋯ → Đặt tên miền Browser (.test) gán cho cổng một tên miền dev như myapp.test. Bên trong Browser (VM), https://myapp.test sau đó tải máy chủ của bạn với một ổ khóa hợp lệ — hữu ích cho bất cứ thứ gì hành xử khác đi trên một origin có tên hoặc trong một ngữ cảnh bảo mật (cookie, service worker, callback OAuth).

  • Tên miền phải kết thúc bằng .test hoặc .localhost — hai TLD dành riêng cho phát triển, nên một tên dev không bao giờ có thể che khuất một trang thật.
  • Tên miền là duy nhất trên máy chủ; số cổng thì không. Hai space có thể cùng dùng 5173, nhưng chúng không thể cùng đòi myapp.test.
  • Chứng chỉ đến từ một CA cục bộ được tạo trên máy chủ của bạn trong lần đầu nó được cần tới. Khóa của nó nằm dưới thư mục dữ liệu của máy chủ và không bao giờ lọt vào bất kỳ hệ thống khách nào; trình duyệt khép kín chỉ tin đúng một khóa đó, nên TLS tới internet thật vẫn xác thực bình thường.
  • Tên miền chỉ phân giải bên trong Browser (VM). Trình duyệt của chính bạn trên host thì dùng localhost:<port> thay vào đó.
  • http://myapp.test trần cũng hoạt động.

Thêm cổng ở cuối bảng sẽ ánh xạ một cổng trước khi (hoặc dù) có bất cứ thứ gì đang lắng nghe trên nó. Một bản chuyển tiếp thủ công giữ nguyên địa chỉ của nó trong khi máy chủ của bạn khởi động lại — dòng đó hiển thị không lắng nghe cho tới khi nó trở lại — còn các bản chuyển tiếp tự động biến mất khi cổng của chúng biến mất. Trên một shell host, bạn cũng có thể đặt một cổng cục bộ khác.

Các cổng được lập chỉ mục theo không gian làm việc và space. Bản đồ cổng của chính hypervisor là cố định khi một cỗ máy khởi động, nên một Terminal (VM) đi qua hai kênh hẹp do máy chủ kiểm soát: một làn vào được tạo sẵn dẫn tới hệ thống khách, vốn từ chối kết nối tới bất kỳ cổng nào mà hệ thống khách không thực sự đang lắng nghe, và những tunnel ngược mà máy chủ giữ mở cho Browser (VM) và Android. Một shell host không bao giờ quét toàn bộ cỗ máy. Không cổng lắng nghe nào từng được tạo bên trong một hệ thống khách mà máy chủ không đặt ở đó, và mọi thứ đều bị tháo dỡ cùng terminal hoặc rig. Thiết kế được giải thích trong Rigs và môi trường cách ly; còn các cổng dành riêng chính xác và quy tắc tên miền nằm trong tham chiếu rigs.